2007年7月28日 星期六

1.8 Date & Time: Date, Now, Time, DateAdd, DateDiff, DatePart, DateSerial, TimeSerial, TimeValue

Private Sub DateDemo()

'MsgBox"Date:"& Date'To get system day'
'MsgBox"Date:"& Now'To get system day and time'
'MsgBox"Date:"& Time'To get system time'
'MsgBox"Date:"& DateAdd("d",40,"12/29/2006:)'count day after date'
'yyyy Year
'q wuarter m month d day ww week
'h hour n minute s second
MsgBox "date diff" & DateDiff("d", "12/29/2006", "2/7/07")
MsgBox "date part" & DatePart("d", "12/29/2006") 'to get the part of the date
MsgBox "date part" & DatePart("y", "February 12,2006")
MsgBox "date:" & DateSerial(2006, 12, 59) 'To change the format to fulfil e
'MsgBox"Time:" & TimeSerial(13,30,59)
'MsgBox "Time:" & TimeValue("4:35:17 PM")

End Sub

  1. Date 傳回系統日期 (電腦所記錄的現在日期)。
  2. Now 傳回電腦現在所記錄的日期與時間。
  3. Time 傳回電腦現在所記錄的時間。
  4. DateAdd("間隔單位","間隔數值","基準日期") 傳回某個基準日期加上特定時間間隔單位後的日期。間隔設定:
  5. DateDiff("間隔單位","日期1","日期2") 傳回兩個日期間相差的時間間隔單位數目。 Variant (Long)
  6. DatePart("單位","日期") 傳回 Integer,內容為指定日期的某個時間部份,以指定的時間間隔單位計算。
  7. DateSerial(年, 月, 日) 傳回一 Variant (Date),內容為指定的年、月、日之日期表示式。
  8. TimeSerial(時, 分, 秒) 傳回一 Variant (Date),內容為指定之時、分、秒的日期表示式。
  9. TimeValue("時間") 傳回一 Variant (Date) 的時間表示式(24 小時制的時間)。如果 time 是 Null,則傳回 Null。
設定 說明
yyyy 西元年
q
m
y 一年的日數
d
w 一週的日數
ww
h
n
s

1.7 Operators: +-*/\^, Mod, And, Or, Not, =>< <>...

Private Sub VBA_Operators()

Dim a, b As Integer
Dim c, d, e As Boolean
c = True
d = False
a = 10
b = 3

'MsgBox "a+b=" & (a + b)
'MsgBox "a-b=" & (a - b)
'MsgBox "a*b=" & (a * b)
'MsgBox "a/b=" & (a / b)
MsgBox "a\b=" & (a \ b)
'MsgBox "次方 a^b=" & (a ^ b)
'MsgBox "餘數 a mod b=" & (a Mod b)
MsgBox "兩樣同時符合 c and d=" & (c And d)
MsgBox "c or d=" & (c Or d)
MsgBox "Not c is" & (Not c)
'MsgBox "a=b" & (a = b)
'MsgBox "a<b" & (a < b)
'MsgBox "a>b" & (a > b)
'MsgBox "a<=b" & (a <= b)
'MsgBox "a>=b" & (a >= b)
'MsgBox "a<>b=" & (a <> b)

End Sub

  1. \ 除後排除小數點。 10.6 -> 10
  2. ^ 次方。 ^(1/2) 開方
  3. Mod 餘數
  4. And 符合兩個條件。True And False -> False
  5. Or 符合其中一個條件。True And False -> True
  6. Not 相反。 Not True -> False
  7. <> 不等於

1.6 InputBox

Private Sub InputBoxDemo()

Dim Sheetname As String

inputMsg = InputBox("Enter you name:", "Get your name", "")

If (inputMsg = "") Then
MsgBox "you pressed the CANCEL key"
Else
MsgBox "HELLO!" & "your name is " & inputMsg
End If

End Sub

  1. InputBox("訊息", "標題", "預設輸入文字") 顯示一對話方塊來做為提示,等使用者輸入文字或按下按鈕,並傳回包含文字方塊內容的String。

2007年7月27日 星期五

1.5 MsgBox, MsgBox 傳回值

Public Sub MsgBoxDemo()

Dim retrunValue As Integer

returnValue = MsgBox("OK_camce_Button+Critical+DefaultButton2+Applicationmodal 用文字提示寫", vbOKCancel + vbCritical + vbDefaultButton2 + vbApplicationModal, "Title Text")

'returnValue = MsgBox("OK_Cancel_Button+Critical+defaultButton2+Applicatonmodal 用數字格式寫", 2 + 16 + 256 +0, "Title Test Text")

If (returnValue = vbOK) Then
MsgBox ("You pressed the OK button")

Else

If (returnValue = vbCancel) Then
MsgBox ("You pressed the CANCEL button")
End If

End If
End Sub

  1. MsgBox("訊息", button 類別 + 訊息類型 + 預設已選定的按鈕 + , "標題文字") 將訊息顯示在對話方塊中,等使用者按下按鈕,並傳回一 Integer 來指示使用者按下的是那一個鈕。
    常數 說明
    vbOKOnly 0 只有 OK 按鈕(預設值)。
    vbOKCancel 1 OKCancel 按鈕。
    vbAbortRetryIgnore 2 AbortRetry,和 Ignore 按鈕。
    vbYesNoCancel 3 YesNo,和 Cancel 按鈕。
    vbYesNo 4 YesNo 按鈕。
    vbRetryCancel 5 RetryCancel 按鈕
    vbCritical 16 錯誤訊息。
    vbQuestion 32 警告詢問。
    vbExclamation 48 警告訊息。
    vbInformation 64 通知訊息。

    vbDefaultButton1 0 第一個按鈕是預設的(預設值)。
    vbDefaultButton2 256 第二個按鈕是預設的。
    vbDefaultButton3 512 第三個按鈕是預設的。
    vbDefaultButton4 768

  2. MsgBox 傳回值
    常數 說明
    vbOK 1 按下 OK 按鈕。
    vbCancel 2 按下 Cancel 按鈕。
    vbAbort 3 按下 Abort 按鈕。
    vbRetry 4 按下 Retry 按鈕。
    vbIgnore 5 按下 Ignore 按鈕。
    vbYes 6 按下 Yes 按鈕。
    vbNo 7 按下 No 按鈕。

1.4 Range(), .Activate, .Select, .Count

Private Sub WorksheetDemo02()

Dim ws As Worksheet
Dim Sheetname As String

Sheetname = "Sheet3"
Set ws = ActiveWorkbook.Worksheets(Sheetname)
ws.Activate
'ws.Range("A1").Select
ws.Range("A1:B10").Select
'ws.Range("A1:B10", "A8:C12").Select 'select by the range interest
'ws.Range(Rows(2), Rows(4)).Select
'ws.Range(Columns(2),Columns(3)).Select

'ws.select 'equals to ws.Activate

'MsgBox ws.Range("A1").Count
'MsgBox ws.Range("A1:b10").Count
'MsgBox ws.Range(Rows(2),Rows(4)).Count
'MsgBox ws.Range(Columns(2),Columns(3)).Count

End Sub

  1. .Activate / .Select 指定一個儲存格或一個儲存格範圍,可使用 Select 方法。要將單個儲存格啟動為作用中儲存格,可使用 Activate 方法。
  2. Range("cells" / column(#) / rows(#)) 指定範圍 (該指定範圍可包含一個或若干連續儲存格範圍) 或者某一立體範圍。
  3. .Count 傳回一個 Long (長整數),等於一個集合物件中的物件數目。
    Range(Rows(2),Rows(4)).Count 會傳回 3 (rows)

1.3 Rows(), Cells()

Sub CellDemo1()

Dim ws As Worksheet
Dim Sheetname As String

Sheetname = "Sheet3"

Set ws = ActiveWorkbook.Worksheets(Sheetname)

ws.Rows(2).Cells(2) = "Hello"

End Sub

  1. Rows(row#) 指定列數
  2. Cells(cell#) 指定第幾個儲存格 (由左至右數起)
  3. Rows(#).Cells(#) 指定在某一列計起的第幾個儲存格

1.2 .ActiveWorkbook, Worksheets()

Private Sub WorksheetDemo2()

Dim ws As Worksheet
Dim Sheetname As String

Sheetname = "Sheet2"

Set ws = ActiveWorkbook.Worksheets(Sheetname)

ws.Cells(9, 5) = 9 + 6

End Sub

  1. ActiveWorkbook 傳回一個 Workbook 物件,該物件為正在使用的活頁簿。如果沒有開啟任何視窗、或使用中視窗為 [資訊] 視窗或 [剪貼簿] 視窗,則傳回 Nothing。
  2. Worksheets(Sheetname) 指定活頁簿中那個工作表

1.1 Dim, Set, Cells()

Private Sub WorksheetDemo()
Dim ws As Worksheet
Set ws = ActiveSheet
ws.Cells(8, 4) = "Hello!"
End Sub

  1. Dim 宣告變數,並配置儲存空間。
  2. 使用 Set 陳述式來將物件的引用指定給變數。
    Set ws = Nothing ' 釋放物件引用 (中斷連結,使 ws 不再對應到ActiveSheet)。
  3. Cells(row#, column#) 直接指定列索引和欄索引。