大衛鮑森 - 新舊約縱覽 (影音、文字資料)02

舊曆年年假期間,總算將 Q5 Help Me 網站中,有關大衛鮑森牧師 新約縱覽 的講道文字資料,稍加處理並做備份。
該網站提供有兩大部分資料:
舊約縱覽文摘 (http://www.q5help.me/ReadBible/DavidPawsonOldTestament.jsp)
新約縱覽文摘 (http://www.q5help.me/ReadBible/DavidPawsonNewTestament.jsp)

大衛鮑森 - 新舊約縱覽的講道影音系列,可分成:

  • 舊約縱覽(上)   32 集
  • 舊約縱覽(下)   28 集
  • 新約縱覽         38 集

各位可點擊下列連接,查看 約縱覽 相關內容。

61馬太福音(一) 80腓立比書 腓利門書(一)
62馬太福音(二) 81腓立比書 腓利門書(二)
63馬可福音 82提摩太前後書 提多書(一)
64路加福音 83提摩太前後書 提多書(二)
65約翰福音(一) 84希伯來書(一)
66約翰福音(二) 85希伯來書(二)
67使徒行傳(一) 86雅各書(一)
68使徒行傳(二) 87雅各書(二)
69保羅及保羅書信 88彼得前後書(一)
70帖撒羅尼迦前後書(一) 89彼得前後書(二)
71帖撒羅尼迦前後書(二) 90約翰一二三書(一)
72哥林多前後書(一) 91約翰一二三書(二)
73哥林多前後書(二) 92猶大書
74加拉太書(一) 93啟示錄(一)啟示錄之謎
75加拉太書(二) 94啟示錄(二)升天的主
76羅馬書(一) 95啟示錄(三)大患難
77羅馬書(二) 96啟示錄(四)墮落的淫婦
78歌羅西書 97啟示錄(五)最後的千禧年
79以弗所書 98啟示錄(六)從天而降的新婦

大衛鮑森 - 新舊約縱覽 (影音、文字資料)01

舊曆年年假期間,總算將 Q5 Help Me 網站中,有關大衛鮑森牧師 舊約縱覽 的講道文字資料,稍加處理並做備份。

該網站提供有兩大部分資料:
舊約縱覽文摘 (http://www.q5help.me/ReadBible/DavidPawsonOldTestament.jsp)
新約縱覽文摘 (http://www.q5help.me/ReadBible/DavidPawsonNewTestament.jsp)

大衛鮑森 - 新舊約縱覽的講道影音系列,可分成:

  • 舊約縱覽(上)   32 集
  • 舊約縱覽(下)   28 集
  • 新約縱覽         38 集


各位可點擊下列連接,查看 舊約縱覽 相關內容。

01舊約概論 31雅歌
02創世記(一)聖經的基礎 32傳道書
03創世記(二)造物主和受造物 33俄巴底亞書和約珥書(一)
04創世記(三)生物與進化 34俄巴底亞書和約珥書(二)
05創世記(四)從伊甸園到巴別塔 35約拿書
06創世記(五)亞伯拉罕、以撒和雅各 36那鴻書
07創世記(六)約瑟和耶穌 37阿摩司書
08出埃及記(一) 38何西阿書
09出埃及記(二) 39彌迦書
10利未記(一) 40以賽亞書(一)
11利未記(二) 41以賽亞書(二)
12民數記(一) 42西番雅書
13民數記(二) 43哈巴谷書
14申命記(一) 44耶利米書(一)
15申命記(二) 45耶利米書(二)
16約書亞記(一) 46耶利米哀歌
17約書亞記(二) 47以西結書(一)
18士師記和路得記(一) 48以西結書(二)
19士師記和路得記(二) 49以西結書(三)
20撒母耳記上下(一) 50但以理書(一)
21撒母耳記上下(二) 51但以理書(二)
22希伯來詩 52以斯帖記
23詩篇(一) 53以斯拉記+尼希米記(一)
24詩篇(二) 54以斯拉記+尼希米記(二)
25約伯記(一) 55歷代志上下
26約伯記(二) 56哈該書
27列王紀上下(一) 57撒迦利亞書(一)
28列王紀上下(二) 58撒迦利亞書(二)
29箴言(一) 59瑪拉基書(一)
30箴言(二) 60瑪拉基書(二)

在 VBA 中,寄送 GMail 郵件

想要使用 VBA 來寄送 GMail 郵件,就要應用到 CDO(Collaboration Data Objects) 的功能。但是實務上的使用,就算是不知道什麼是 CDO
也可以輕鬆應用它來寄送郵件。

以下是網路既有的函數,程式指令直接照抄,只要修正部分指令內容即可。(有加上底色的區域)

Private Function fSendGmail() As Boolean        'Returns True if No Errors are Generated
    On Error GoTo Err_ErrorHandler
   
    fSendGmail = True
      
    'Extract
    'The SendMail() Function
    'While longer, SendMail( ) is itself a simpler function than GetData( ) . It simply creates three
    'objects: CDO. Message, CDO. Configuration, and a subobject of CDO. Configuration called
    'Fields . The Scripting library used in GetData() is a default part of the ASP namespace, and
    'therefore any new object created in the Scripting library is known. To use objects in the CDO
    'library, the METADATA statements at the top of the ASP page are necessary.
   
    'Standard CDO Constants
    'NOTE --- If you set conCdoSmtpUseSSL to True, you may need to set conCdoSendUsingPort to 465 or port number specified by your ISP.
    Const conStrPrefix As String = "http://schemas.microsoft.com/cdo/configuration/"
    Const conCdoSendUsingPort As Integer = 2                'If incorrect raises this Error: -2147220960
    Const conCdoBasic As Integer = 1
    Const conStrSmtpServer As String = "smtp.gmail.com"     'If incorrect raises this Error: -2147220973
    Const conCdoSmtpUseSSL As Boolean = True                'Use Secure Sockets Layer (SSL) when posting via SMTP.
    Const conCdoSmtpServerPort As Integer = 465             'Can be 465 or 587 'If incorrect raises this Error: -2147220973
   
    Const conSendUserName As String = "pertonchang@gmail.com"
    Const conSendPassword As String = "**********"
   
    Dim oMsg As Object
    Dim oConf As Object
    Dim strEmailAddr As String
   
    strEmailAddr = "pertonchang@gmail.com"
   
    'Create Objects
    Set oMsg = CreateObject("CDO.Message")
    Set oConf = CreateObject("CDO.Configuration")
    Set oMsg.Configuration = oConf
   
    'Build the Message
    With oMsg
        .To = "Testing <" & strEmailAddr & ">"  
        .From = "From TextBox <pertonchang@gmail.com>"  'If incorrect raises this Error: -2147220973
        .Subject = "From Keyed in Email Address"
        .TextBody = "From Keyed in Email Address"       
        .AddAttachment "H:\GoogleEmail\TransscriptGmailFromVBA.txt"
    End With
               
    ''Set Delivery Options
    With oConf.Fields
        .Item(conStrPrefix & "sendusing") = conCdoSendUsingPort
        .Item(conStrPrefix & "smtpserver") = conStrSmtpServer
        .Item(conStrPrefix & "smtpauthenticate") = conCdoBasic
        .Item(conStrPrefix & "sendusername") = conSendUserName
        .Item(conStrPrefix & "sendpassword") = conSendPassword
        .Item(conStrPrefix & "smtpusessl") = conCdoSmtpUseSSL
        .Item(conStrPrefix & "smtpserverport") = conCdoSmtpServerPort
        .Update             'Commit Changes
    End With
   
    'Deliver the Message
    oMsg.send
   

Exit_ErrorHandler:
'Access 2007 Developer Reference > Microsoft Data Access Objects (DAO) Reference > DAO Reference > Recordset Object > Methods
'An alternative to the Close method is to set the value of an object variable to Nothing (Set dbsTemp = Nothing).
    Set oMsg.Configuration = Nothing
    Set oConf = Nothing
    Set oMsg = Nothing
   
    Exit Function

Err_ErrorHandler:
    If Err.Number <> 0 Then fSendGmail = False
        Select Case Err.Number

            Case -2147220977  'Likely cause, Incorrectly Formatted Email Address, server rejected the Email Format
                MsgBox "Error From --- fSendGmail --- Incorrectly Formatted Email ---  Error Number >>>  " _
                & Err.Number & "  Error Desc >>  " & Err.Description, , "Format the Email Address Correctly"

            Case -2147220980  'Likely cause, No Recipient Provided (No Email Address)
                MsgBox "Error From --- fSendGmail --- No Email Address ---  Error Number >>>  " _
                & Err.Number & "  Error Desc >>  " & Err.Description, , "You Need to Provide an Email Address"

            Case -2147220960 'Likely cause, SendUsing Configuration Error
                MsgBox "Error From --- fSendGmail --- The SendUsing configuration value is invalid --- LOOK HERE >>> sendusing) = conCdoSendUsingPort ---  Error Number >>>  " _
                & Err.Number & "  Error Desc >>  " & Err.Description, , "SendUsing Configuration Error"
           
            Case -2147220973  'Likely cause, No Internet Connection
                MsgBox "Error From --- fSendGmail --- No Internet Connection ---  Error Number >>>  " _
                & Err.Number & "  Error Desc >>  " & Err.Description, , "No Internet Connection"
           
            Case -2147220975  'Likely cause, Incorrect Password
                MsgBox "Error From --- fSendGmail --- Incorrect Password ---  Error Number >>>  " _
                & Err.Number & "  Error Desc >>  " & Err.Description, , "Incorrect Password"
           
            Case Else   'Report Other Errors
                MsgBox "Error From --- fSendGmail --- Error Number >>>  " & Err.Number _
                & "  <<< Error Description >>  " & Err.Description
        End Select
       
    Resume Exit_ErrorHandler
End Function      'fSendGmail

網路資源:https://www.linkedin.com/pulse/20140810123722-4192976-sending-google-mail-gmail-from-ms-access-vba-excel-word

免費網頁服務–GitHub

認識 GitHub 的人,一定知道 GitHub 是提供版本控制的好環境;但沒想到它也提供有網頁服務。
GitHub 提供兩種形態的網頁服務,第一種是以使用者或組織等級的網頁,第二種是專案等級的網頁空間。
這些服務統稱為 GitHub Pages,相關資訊可參考:https://help.github.com/categories/github-pages-basics/

也許有人會以 GitHub 平時的操作方式,嘗試將 HTML 檔案呈現在 網頁上。
那可能會有下面的結果
image

同理,即使已經建制 使用者帳號.github.io,但是連接網址仍然不合規定格式,也會顯示出不正常的內容。
例如: https://github.com/PertonChang/PertonChang.github.io/blob/master/新舊約縱覽/56哈該書.html

若是要正常顯示 01舊約概論.html  ( http://pertonchang.github.io/新舊約縱覽/01舊約概論.html )
image

就需要用 GitHub Pages 的功能才行!!

這裡,簡單說明如何設定使用者等級的網頁空間。

  1. 須登入 GitHub
  2. 在 GitHub 的主頁面,按下"+ New repository",來建制 Repo
  3. Repo 的名稱,需要以 "使用者帳號.github.io"
  4. 建制好 Repo 名稱後,他的操作方法與平時 GitHub 的操作相同。

Excel VBA 的小技巧 - 03

有幾個指令在程式自動化中,可以善加運用,好增進程式的運作效能及美觀。

Application.ScreenUpdating = False  ' turn off the screen updating

Application.ScreenUpdating = True   ' turn on the screen updating

 

ActiveWindow.FreezePanes = True

ActiveWindow.FreezePanes = False

 

Application.DisplayAlerts = False

Application.DisplayAlerts = True

 

之前【Excel VBA 的小技巧 - 02】文章提到,要在不同的活頁簿中切換,可用 Activate 來處理,好切換到指定名稱的活頁簿。
例如:
    從現在使用中的活頁簿,切換到 Excel3 的 Sheet2
         Workbooks("Excel3").Sheets("Sheet2").Activate

    從現在使用中的活頁簿,切換到 Excel1 的 Sheet1
         Workbooks("Excel1").Sheets("Sheet1").Activate

    若是,切換不同活頁簿的過程中,沒有特別要切換到不同的工作表,那麽可以用 Windows().Activate 來簡化。
         Windows(strExcelSource).Activate

Excel VBA 的小技巧 - 02

     上一篇文章【Excel VBA 的小技巧 - 01】提到如何用 陣列 動態宣告的方式,來創建新的 Excel 活頁簿檔案。
原本以為新的 Excel 活頁簿檔案建立後,就可以直接讀取舊有檔案資料,好回寫到新檔案裡面。不料,原本可以讀到舊檔案資料的指令,在執行過創建新 Excel 活頁簿檔案指令後,既然變成失效!
解決方法:需要事先將現行活頁簿、工作表的資訊記錄下來,並且要在創建新 Excel 活頁簿檔案後,再將先前記錄下來的訊息,加以激活。(作用起來)

   Dim SourceWB as String
   Dim SourceSH as String

   SourceWB = ActiveWorkbook.Name
   SourceSH = ActiveSheet.Name

   ReDim NewBook(intRow): Set NewBook(intRow) = Workbooks.Add
   Workbooks(SourceWB).Sheets(SourceSH).Activate

 

     接下來,談一個 Excel 太聰明所造成的困擾。
你若是在儲存格打入字串 001,這時 Excel 會自動的轉換成數字 1。我想這樣的經驗大家應該都會遇到。
解決方案:改變要登打資料的儲存格格式,從通用格式該成為文字格式。
                   程式碼處理,則是 NumberFormatLocal = "@"
   NewBook(pCnt).Sheets(1).Cells(pRowCnt, "G").NumberFormatLocal = "@"
   NewBook(pCnt).Sheets(1).Cells(pRowCnt, "G") = "001"

 

     使用 Excel 時,常會選擇一個區域的範圍,並按下 Delete 鍵來清除該範圍中的資料。所以改用程式處理時,也就會下 Delete 指令,如此卻得到不正確地結果。應該下 ClearContents。
   Rows("4:65536").Select
   Selection.ClearContents

Excel VBA 的小技巧 - 01

在使用 Excel VBA 的功能中,有幾個常用的程式指令,需要清楚該指令的功效!

Application.Path      =>  C:\Program Files\Microsoft Office 15\root\office15
ActiveWorkbook.Path   =>  D:\GitHub\_Misc\訂單

ActiveWorkbook.Name   =>  Excel 活頁簿的名稱
ActiveSheet.Name      =>  Sheet1 or 料號 等工作表的名稱

ActiveCell().Row       =>  目前操作中儲存格的Row值,例如:D3儲存格,就得到 3。
ActiveCell().Column    =>  目前操作中儲存格的Column值,例如:D3儲存格,就得到 4(D Column)。

Cells(3, "D")          =>  可以得到 D3儲存格的內容值。
Cells(3, 4)            =>  可以得到 D3儲存格的內容值。
Range("D3")            =>  可以得到 D3儲存格的內容值。


在同一個活頁簿中,可以用 Activate 來切換到指定名稱的工作表
例如:從 Sheet1 要切換到 Sheet3
     Sheets("Sheet3").Activate

若是要在不同的活頁簿中切換,也是用 Activate 來處理,以便切換到指定名稱的活頁簿
例如:從 Excel1 的 Sheet1 要切換到 Excel3 的 Sheet2
     Workbooks("Excel3").Sheets("Sheet2").Activate


要創建新的 Excel 檔案,可使用 Workbooks.Add、Workbooks.SaveAs
以下是範例演示:

    strTarget = Format(Now(), "YYYYMMDD") & "_" & Format(Time(), "hhmmss")
    strTargetFile = ActiveWorkbook.Path & "\" & strTarget & ".xlsx"

    Set NewBook = Workbooks.Add

    NewBook.Sheets(1).Cells(3, "C") = "asdgf"

'    NewBook.Title = "All Sales"
'    NewBook.Subject = "Sales"
    NewBook.SaveAs strTargetFile

    NewBook.Close

 

要同時建制多個活頁簿,可以應用 陣列、動態宣告的方式,來優化程式碼。
    ReDim NewBook(intRow): Set NewBook(intRow) = Workbooks.Add
    Workbooks(SourceWB).Sheets("Data-天河").Activate

有時候,動態宣告需要保留先前已宣告的內容,就要配合 Preserve。
    ReDim strCustNo(1): strCustNo(1) = "AAA"
    ReDim Preserve strCustNo(2): strCustNo(2) = "BBB"

空中主日學_忠心有見識的管家_曹力中牧師 (播放清單)



手機、平板用戶,請點擊 YouTube 空中主日學_忠心有見識的管家_曹力中牧師 (播放清單)

劉三講古_台灣生命力 2015_劉曉亭牧師 (播放清單)



手機、平板用戶,請點擊 YouTube 劉三講古_台灣生命力 2015_劉曉亭牧師 (播放清單)

談電子資料交換(EDI)基礎技術的對照:文字檔的讀取

現今電腦使用極為平凡,網路上的資料又是多如洋海,景然像是個大數據(Big Data)時代。
若要資料互通,彼此連結,就常常會應用電子資料交換的技術;好讓工作順暢,也可以節省人力、時間。

一般來說,電子資料交換最常使用文字檔格式(也稱作文本檔) *.txt。這類型的檔案,只要滑鼠點擊兩下,就可以被 NotePad 給開啟。(Windows 的默認設定)
但很多人可能不會注意到,這個被開啟的檔案是被儲存成什麼編碼格式?例如:ANSI、Unicode、Unicode big endian、UTF-8。

你可以使用各式文書編輯軟體,來看看他們是什麼編碼格式。
例如:用 NotePad++ 可以看到 image,喔,原來儲存為 UTF-8 格式。

你若是用 NotePad,就會看到 image,你也可以更改成其他編碼格式來存檔。
image

 

電子資料交換的應用,一般是以程式方式來處理。方法有 Input/Output、File System ObjectADODB.Stream。

The File System Object, generally used by VBScript devlopers to read and write text files, can read only ASCII or Unicode text files. You cannot use it to read or write UTF-8 encoded text files.

But, if you can use Microsoft ActiveX Data Objects (ADO), you can read UTF-8 encoded text files

File System Object 常被使用在 VBScript 的開發上,可用以讀/寫 ASCII或Unicode 格式的文本檔。但 File System Object 不能用存取 UTF-8 編碼的檔案。

所以,你能使用 Microsoft ActiveX Data Objects (ADO) 才能讀取 UTF-8 編碼的檔案。

 

以下是兩種類型的程式對比條列,方便有需求者參考。


    Dim strFile As String
Dim InputStr As String
Dim Fn As Integer

strFile = "D:\GitHub\Misc\對帳單.txt"

Fn = FreeFile
Open strFile For Input As #Fn





While Not EOF(Fn)
Line Input #Fn, InputStr

' do something ....
Wend

Close #Fn
    Dim strFile As String
Dim InputStr As String
Dim oStreamIn

strFile = "D:\GitHub\Misc\對帳單.txt"

Set oStreamIn = CreateObject("ADODB.Stream")
oStreamIn.Type = 2 ' adTypeText
oStreamIn.Open
oStreamIn.Charset = "utf-8"
oStreamIn.LoadFromFile strFile
oStreamIn.LineSeparator = 10 ' # Linefeed

Do Until oStreamIn.EOS
InputStr = oStreamIn.ReadText(-2) ' adReadLine

' do something ....
Loop

oStreamIn.Close