顯示具有 EXCEL VBA 標籤的文章。 顯示所有文章
顯示具有 EXCEL VBA 標籤的文章。 顯示所有文章

2014年3月7日 星期五

EXCEL VBA:檔案處理

ActiveWorkbook.Path 目前活頁簿的路徑

Workbooks.Open Filename:="D:\new.xls"

要刪除檔案,可以使用Kill指令:
Kill "C:\Test\Test.txt"

'要建立目錄之前,通常要保險地先確定目錄不存在:
If Len(Dir("c:\Test\Temp", vbDirectory)) = 0 Then
   MkDir "c:\Test\Temp"
End If

要刪除目錄,則使用RmDir指令:
On Error Resume Next
RmDir "c:\Test\Temp"

'確定檔案是否存在?
set fs = CreateObject("Scripting.FileSystemObject")
If fs.FileExists(ActiveWorkbook.Path & "\" & "FileName.xls") Then
  MsgBox "File Exists!" '檔案存在
Else
  MsgBox "File Not Exists!" '檔案不存在
End If



'確定檔案是否存在?
Private Function FileExists(fname) As Boolean
'   Returns TRUE if the file exists
    Dim x As String
    x = Dir(fname)
    If x <> "" Then FileExists = True _
    Else FileExists = False
End Function

'確定檔案是否存在?
Function FileExist(ByVal strFile As String) As Boolean
    On Error Resume Next
    FileExist = (Len(Dir(strFile)) > 0)
End Function

==========================================
http://support.microsoft.com/kb/184982/zh-tw

下列範例巨集的 Visual Basic for Applications 呼叫函式 FileLocked,並傳遞的完整路徑和檔案的測試名稱。如果函式會傳回最有可能發生,則為 True,錯誤代碼 70 「 權限被拒 」,且檔案目前開啟並鎖定其他處理程序。函數會傳回 False,如果檔案未開啟,而且巨集開啟文件。

    Sub YourMacro()
      Dim strFileName As String

      ' Full path and name of file.
      strFileName = "C:\test.doc"

      ' Call function to test file lock.
      If Not FileLocked(strFileName) Then
         ' If the function returns False, open the document.
         Documents.Open strFileName
      End If
   End Sub

 Function FileLocked(strFileName As String) As Boolean
      On Error Resume Next

      ' If the file is already opened by another process,
      ' and the specified type of access is not allowed,
      ' the Open operation fails and an error occurs.
      Open strFileName For Binary Access Read Write Lock Read Write As #1
      Close #1

      ' If an error occurs, the document is currently open.
      If Err.Number <> 0 Then
         ' Display the error number and description.
         MsgBox "Error #" & Str(Err.Number) & " - " & Err.Description
         FileLocked = True
         Err.Clear
      End If
   End Function
====================================================

Dim w As Window
Dim wb As Workbook

strFilename = "new.xls"   '檔名+副檔名
Set d = CreateObject("Scripting.dictionary")
For Each w In Windows
   d(w.Caption) = w.Caption
Next
If d.exists(strFilename) = False Then Workbooks.Open Filename:="D:\new.xls"

Set wb = Workbooks("new.xls")
wb.Activate
    ActiveSheet.Range("A65536").End(xlUp).Offset(1, 0).Select

    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    Application.CutCopyMode = False

    wb.Save
=================================================
 http://edisonx.pixnet.net/blog/post/42267366-vba-%E6%B4%BB%E9%A0%81%E7%B0%BF%28workbooks%29%E7%AE%A1%E7%90%86

' ------------------------------------------------------------
' 查看目前開啟excel檔案數量


Dim OpenCnt as Integer
OpenCnt = Application.Workbooks.Count
' ------------------------------------------------------------
' 依序查已開檔名 - 方法一

    Dim i As Integer
    For i = 1 To Workbooks.Count
        MsgBox i & " " & Workbooks(i).Name
    Next
' ------------------------------------------------------------
' 依序查已開檔名 - 方法二

Dim my Sheet As WorkSheet
For Each mySheet In Worksheets
    MsgBox mySheet.Name
Next mySheet

' ------------------------------------------------------------
' 開啟特定檔案 - 方法一


filename = "C:\VBA\test.xls"
Workbooks.Open filename
' ------------------------------------------------------------
' 開啟特定檔案 - 方法二

Dim filename As String
filename = "C:\VBA\test.xls"

    Dim sn As Object
    Set sn = Excel.Application
    sn.Workbooks.Open filename
    ' sn.Workbooks(filename).Close ' 關閉
    Set sn = Nothing
' ------------------------------------------------------------
' 關閉指定檔案, 不提示訊息
    Dim filename As String
    filename = "Test.xls"  ' 這裡只可以給短名,給全名會錯
    ' 假設 Test.xls 已於開啟狀態

    Application.DisplayAlerts = False ' 關閉警告訊息    Workbooks(filename).Close
    Application.DisplayAlerts = True ' 再打開警告訊息
' ------------------------------------------------------------
' 關閉所有開啟檔案, 但留下主視窗
Workbooks.Close
' ------------------------------------------------------------
' 關閉 excel 程式

Application.Quit
' ------------------------------------------------------------
' 直接進行存檔

Dim filename As String
filename = "a.xls" ' 只可為短檔名WorkBooks(filename).Save

' ------------------------------------------------------------
' 指定檔名進行另存新檔,並關閉


' 假設要將 "a.xls" 存成 "C:\b.xls"
Application.DisplayAlerts = False ' 關閉警告訊息
Workbooks("a.xls").SaveAs "C:\b.xls" ' 另存新檔
Workbooks("b.xls").Close ' 關閉 b.xlsApplication.DisplayAlerts = True ' 開啟警告訊息
' ------------------------------------------------------------
' 指定當前活頁簿

Dim Caption as String
Caption = "a.xls"
Workbooks(Caption).Activate ' 將視窗切到 a.xls




=====================================================
http://ithelp.ithome.com.tw/question/10119961?tag=ithome.nq
  1. Option Explicit  
  2. Dim FileAlreadyOpened   '已開啟的檔案  
  3. Sub OpenWorkbook()  
  4.     Dim FileToOpen      '使用者選擇要開啟的檔案  
  5.     FileToOpen = Application.GetOpenFilename(Title:="Please choose a file to import", FileFilter:="Excel Files *.xls (*.xls),")  
  6.       
  7.     If FileToOpen = False Then  
  8.         MsgBox "未指定檔案", vbInformation  
  9.         Exit Sub  
  10.     Else  
  11.         If FileToOpen = FileAlreadyOpened Then  
  12.             MsgBox "檔案已開啟", vbInformation  
  13.         Else  
  14.             Workbooks.Open FileName:=FileToOpen  
  15.             FileAlreadyOpened = FileToOpen  
  16.         End If  
  17.     End If  
  18. End Sub 

EXCEL VBA:強制宣告


Option Explicit  強制宣告

EXCEL VBA:陣列

Option base 1  陣列索引值以1為啟始。


一維陣列宣告:
-------------------------------------------
Dim x (1 To 6)  預設值為0
Dim x (1 To 6) As Integer  預設值為0
-------------------------------------------
Option base 1  陣列索引值以1為啟始。
Dim x (6)


二維陣列宣告:

 Dim x (1 To 10, 1 To 2)

EXCEL VBA:亂數

亂數:

呼叫 Rnd 前,請使用沒有引數的 Randomize 陳述式以系統計時器做為種子來初始化亂數產生器。

不重覆的演算法還算蠻常見的,以下就用Excel來展現。

法一:比對法

'比對法

Sub myRand()

    Dim StartTime As Date

    Randomize Timer

    Dim i As Long, r As Long, j As Long, k As Long

    Dim N() As Long, M() As Long

    Dim RowCon As Long, ColCon As Integer

    Dim Con As Long

    Cells.Clear

    RowCon = 7

    ColCon = 7

    Con = RowCon * ColCon

    k = 1

    StartTime = Timer

    ReDim N(Con) As Long

    ReDim M(1 To RowCon, 1 To ColCon) As Long

    For i = 1 To Con '亂數序列中不會有相同的數字

        r = 1

        Do Until r <> 1 'r = 1 表示N(i)的亂數有重複

            N(i) = Int(Con * Rnd) + 1 '取亂數

            r = 0

            For j = 1 To i - 1

                If N(i) = N(j) Then '檢查是否重複,若重複就重取亂數

                    r = 1

                    Exit For

                End If

            Next j

        Loop

    Next i

    '陣列轉移

    For i = 1 To RowCon

        For j = 1 To ColCon

            M(i, j) = N(k)

            k = k + 1

        Next j

    Next i

    '填入工作表

    With Sheets("pro")

        .Range(Cells(1, 1), Cells(RowCon, ColCon)).Value = M

    End With

   

    Sheets("inf").Range("A1").Value = "比對法-產生" & Con & "個 亂數排列,花費: " & Format(Timer - StartTime, "00.00") & " 秒."

End Sub


法二,抽牌法

Sub myRand1()

    Dim StartTime As Date

    Dim Index() As Long, NextIndex() As Long

    Dim TraData() As Long

    Dim x As Long, y As Long, z As Long

    Dim i As Long, j As Long, k As Long

    Dim RowCon As Long, ColCon As Long

    Application.ScreenUpdating = False

    RowCon = 100

    ColCon = 100

   

    x = RowCon * ColCon '初值

    y = 0

    Cells.Clear

    ReDim Index(x) As Long '建立空的陣列

    ReDim NextIndex(x) As Long '建立空的陣列

    ReDim TraData(1 To RowCon, 1 To ColCon) As Long

    StartTime = Timer

   

    Do Until y = x

        Randomize

        z = Int(x * Rnd + 1) '產生亂數

        If Index(z) = 0 Then 'Index(z)陣列為0,表示這個位置沒有人坐

            Index(z) = 1 '把亂數代入陣列

            y = y + 1

            NextIndex(y) = z '亂數重新排列,看起來才夠亂

        End If

       

    Loop

   

    '陣列轉移

    For i = 1 To RowCon

        For j = 1 To ColCon

            k = k + 1

            TraData(i, j) = NextIndex(k)

        Next j

    Next i

   

    '填入工作表

    With Sheets("pro")

        .Range(Cells(1, 1), Cells(RowCon, ColCon)).Value = TraData

    End With

   

    Sheets("inf").Range("A2").Value = "抽牌法-" & "產生" & x & "個 亂數排列,花費: " & Format(Timer - StartTime, "00.00") & " 秒."

    Application.ScreenUpdating = True

   

End Sub



洗牌法
Sub test()
Dim x(1 To 60) As Integer
For i = 1 To 60
x(i) = i
Next
For j = 1 To 1000
a1 = Int(Rnd() * 60) + 1
a2 = Int(Rnd() * 60) + 1
temp = x(a1)
x(a1) = x(a2)
x(a2) = temp
Next
For l = 1 To 60
Cells(l, 1) = x(l)
Next
End Sub

排序法
A1=rand(), b1=rank(a1,$a$1:a$60)
拖拉放, b1:b60就是1-60隨機分派

2014年2月26日 星期三

EXCEL VBA:在儲存格內寫入EXCEL公式


Range("B1").Formula = "=sum(A1:A3)"

'公式是「=if(A1="","空","不空")」寫在VBA時," 要改成 ""
Range("B2").Formula = "=if(A1="""",""空"",""不空"")"

2014年2月25日 星期二

EXCEL VBA:FIND

Sub X()
    '在A1:A10000中尋找"Excel"
    Dim rngX As Range
    Set rngX = Worksheets("Sheet1").Range("A1:A10000").Find("Excel", lookat:=xlPart)
    If Not rngX Is Nothing Then
        MsgBox "Found at " & rngX.Address
    End If
    
End Sub

xlPart = looks at the text in the cell for any match.
xlWhole = looks at the entire/exact entry in the cell to see if it matches.

=ADDRESS(MATCH(" Excel*",$A$1:$A$100,0),1)


https://www.udemy.com/blog/excel-vba-find/
Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)
LookAt (optional):  xlWhole and xlPart

LookIn (optional): xlFormulas.
SearchOrder(optional): xlByRows or xlByColumns
===============================================
Cells.Find(What:="24652", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
       xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
       , SearchFormat:=False).Activate
'找不到時,會出現「 執行階段錯誤 91: 物件變數或 with 區塊變數未設定 」 的錯誤
'----------------------------------------------------------------------------------------------------------------
MsgBox Cells.Find(What:="24652", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
       xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
       , SearchFormat:=False).Address
'找不到時,會出現「 執行階段錯誤 91: 物件變數或 with 區塊變數未設定 」 的錯誤

===============================================
searchstr = "123"
Set obj = Cells.Find(What:=searchstr, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
       xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
       , SearchFormat:=False)
If obj Is Nothing Then
    MsgBox "找不到"
Else

   MsgBox obj.Offset(3).Value   '找到後,顯示向下3列的儲存格的資料值。
   MsgBox obj.Address    '顯示位址

    MsgBox obj.Column    '顯示行次(欄次)
   MsgBox obj.Row       '顯示列次
End If
====================================================

EXCEL VBA:補零

補零
====================================================
設定儲存格格式:
補零(但只是顯示上的改變,其真正的值並未改變)
儲存格格式,選擇『自訂』,0 表示確定要顯示的位數,每多一個 0 表示要增加一個位數。若輸入的位數較少,則前面自動補零

=====================================
'寫在儲存格內的補零公式(將B2表成5位號碼,不足位者自動補零,寫入現在的儲存格)
=REPT("0", 5-LEN(B2))&B2

=TEXT(B2,"00000")
=================================
'VBA的寫法一(表成5位號碼)
x = 123
MsgBox String(5 - Len(x), "0") & x
==================================
'VBA的寫法二(表成5位號碼)
x = Range("A1").Value
MsgBox String(5 - Len(x), "0") & x
=================================
'VBA的寫法三(使用自訂函數)(表成5位號碼)
Sub test()
    x = Range("A1").Value
    MsgBox addzero(x, 5)
End Sub

Function addzero(x, n)
    addzero = String(n - Len(x), "0") & x
End Function
=================================

EXCEL VBA:日期格式


dd = Format(Date, "yyyy/mm/dd")
MsgBox dd
MsgBox Format(#4/17/2004#, "yyyy/mm/dd")
MsgBox Format(Date, "yyyy.mm.dd")
MsgBox Date
'取得月份
MONTH( date_value )

EXCEL VBA:定時或倒數計時來執行某一程序

Application.OnTime TimeValue("20:00:00"), "Module1.abc"    '當系統與此相同時,執行模組Module1的程序abd()

Application.OnTime Now + TimeValue("00:00:15"), "Module1.abc"  '當經15秒後,執行模組Module1的程序abd()

資料來源:http://lazywilliam.blogspot.tw/2009/04/excel-vba_21.html

2014年2月24日 星期一

EXCEL VBA:英文字母與ASCII碼

Asc("A")-->65
Chr(65)--->A


英文字母 ASCII碼 英文字母 ASCII碼
A 65 a 97
B 66 b 98
C 67 c 99
D 68 d 100
E 69 e 101
F 70 f 102
G 71 g 103
H 72 h 104
I 73 i 105
J 74 j 106
K 75 k 107
L 76 l 108
M 77 m 109
N 78 n 110
O 79 o 111
P 80 p 112
Q 81 q 113
R 82 r 114
S 83 s 115
T 84 t 116
U 85 u 117
V 86 v 118
W 87 w 119
X 88 x 120
Y 89 y 121
Z 90 z 122











































































































EXCEL VBA:儲存格的格式設定

==================
Range("A1").Select
With Selection
    .HorizontalAlignment = xlLeft   '水平對齊
    .VerticalAlignment = xlCenter   '鉛直對齊
    .WrapText = False                '設定自動換列
    .Orientation = 0                    '設定方向的角度
    .AddIndent = False              '設定縮排
    .IndentLevel = 0                   '設定縮排的值
    .ShrinkToFit = False             '設定縮小字形以適合欄寬
     '設定文字方向,xlContext內容,xlLTR從左至右,xlRTL從右至左
    .ReadingOrder = xlContext          '設定文字方向
    .MergeCells = False                    '設定合拼儲存格
    .Interior.ColorIndex = 9                '填滿的顏色
End With
==================
水平對齊:
.HorizontalAlignment 的設定值:
    xlGeneral 通用格式
    xlLeft 靠左
    xlCenter中間對齊
    xlRight靠右
    xlFill 填滿
    xlJustify 段落重排
    xlCenterAcrossSelection 跨欄置中
    xlDistributed 分散對齊 ( 縮排 )

鉛直對齊:
.VerticalAlignment的設定值:
    xlTop 靠上
    xlCenter 置中對齊
    xlBottom 靠下
    xlJustify段落重排
    xlDistributed分散對齊

 =====================================
'自動調整行高列寬
Columns("A:A").EntireColumn.AutoFit
Rows("1:1").EntireRow.AutoFit
 =====================================
'儲存格的資料格式:
Selection.NumberFormatLocal = "G/通用格式"
Selection.NumberFormatLocal = "0.00_ "
Selection.NumberFormatLocal = "$#,##0.00"
Selection.NumberFormatLocal = _
"_-$* #,##0.00_-;-$* #,##0.00_-;_-$* ""-""??_-;_-@_-"
Selection.NumberFormatLocal = "yyyy/m/d"
Selection.NumberFormatLocal = "[$-F400]h:mm:ss AM/PM"
Selection.NumberFormatLocal = "0.00%"
Selection.NumberFormatLocal = "# ?/?"
Selection.NumberFormatLocal = "0.00E+00"
Selection.NumberFormatLocal = "@"
Selection.NumberFormatLocal = "000"

 =====================================
Selection.Font.Name = "新細明體"
Range("A1").Font.Name = "標楷體"
MsgBox Range("A1").Font.Name     
Selection.Font.ColorIndex =               '設定字體的顏色
Selection.Font.Size =                          '設定字體的大小

 =====================================
Range("A1").Select
With Selection.Font
.Name = "新細明體"
.Size = "20"
.Bold = True
.Italic = True
.Underline = True
End With

=======================================
資料來源:
http://lazywilliam.blogspot.tw/2009/05/excel-vba_15.html
http://lazywilliam.blogspot.tw/2009/05/excel-vba_06.html

2014年2月21日 星期五

EXCEL VBA:獲取儲存格資訊

資料來源:Excel VBA Comics  
http://blog.xuite.net/crdotlin/excel/9016218 

GET.CELL(type_num, reference)
Type_num 指定要獲取儲存格資訊的號碼, 內容如下:
Type_num
1 參照儲存格的絕對位址
2 參照儲存格的列號
3 參照儲存格的欄號
4 類似 TYPE 函數
5 參照位址的內容
6 文字顯示參照位址的公式
7 參照位址的格式,文字顯示
8 文字顯示參照位址的格式
9 傳回儲存格外框左方樣式,數位顯示
10 傳回儲存格外框右方樣式,數位顯示
11 傳回儲存格外框方上樣式,數位顯示
12 如果儲存格被設定 locked傳回 True
15 如果公式處於隱藏狀態傳回 True
16 傳回儲存格寬度
17 以點為單位傳回儲存格高度
18 字型名稱
19 以點為單位傳回字型大小
20 如果儲存格所有或第一個字元為加粗傳回 True
21 如果儲存格所有或第一個字元為斜體傳回 True
22 如果儲存格所有或第一個字元為單底線傳回True
23 如果儲存格所有或第一個字元字型中間加了一條水平線傳回 True
24 傳回儲存格第一個字元色彩數位, 1 至 56。如果設定為自動,傳回 0
25 MS Excel不支援大綱格式
26 MS Excel不支援陰影格式
27 數位顯示手動插入的分頁線設定
28 大綱的列層次
29 大綱的欄層次
30 如果範圍為大綱的摘要列則為 True
31 如果範圍為大綱的摘要欄則為 True
32 顯示活頁簿和工作表名稱
33 如果儲存格格式為多行文字則為 True
34 傳回儲存格外框左方色彩,數位顯示。如果設定為自動,傳回 0
35 傳回儲存格外框右方色彩,數位顯示。如果設定為自動,傳回 0
36 傳回儲存格外框上方色彩,數位顯示。如果設定為自動,傳回 0
37 傳回儲存格外框下方色彩,數位顯示。如果設定為自動,傳回 0
38 傳回儲存格前景陰影色彩,數位顯示。如果設定為自動,傳回 0
39 傳回儲存格背影陰影色彩,數位顯示。如果設定為自動,傳回 0
40 文字顯示儲存格樣式
41 傳回參照地址的原始公式
42 以點為單位傳回使用中視窗左方至儲存格左方水平距離
43 以點為單位傳回使用中視窗上方至儲存格上方垂直距離
44 以點為單位傳回使用中視窗左方至儲存格右方水平距離
45 以點為單位傳回使用中視窗上方至儲存格下方垂直距離
46 如果儲存格有插入批註傳回 True
47 如果儲存格有插入聲音提示傳回 True
48 如果儲存格有插入公式傳回 True
49 如果儲存格是陣列公式的範圍傳回 True
50 傳回儲存格垂直對齊,數位顯示
51 傳回儲存格垂直方向,數位顯示
52 傳回儲存格首碼字元
53 文字顯示傳回儲存格顯示內容
54 傳回儲存格樞紐分析表名稱
55 傳回儲存格在樞紐分析表的位置
56 樞紐分析
57 如果儲存格所有或第一個字元為上標傳回True
58 文字顯示傳回儲存格所有或第一個字元字型樣式
59 傳回儲存格底線樣式,數位顯示
60 如果儲存格所有或第一個字元為下標傳回True
61 樞紐分析
62 顯示活頁簿和工作表名稱
63 傳回儲存格的填滿色彩
64 傳回圖樣前景色彩
65 樞紐分析
66 顯示活頁簿名稱
Reference 一個儲存格或範圍,若省略則為activecell。

學習EXCEL VBA的網路資源

學習EXCEL VBA的網路資源:

Excel VBA Comics

將陽曆轉成農曆(convert solar date to lunar date)的函數


EXCEL VBA:不開啟巨集,看不到資料

資料來源:Excel VBA Comics  http://blog.xuite.net/crdotlin/excel/9105329

工作表Secret
工作表Sheet1
工作表Sheet1上有一個文字方塊DPT與一個按鈕控制項BTN
Thisworkbook 模組
表單 UserForm1
UserForm1 模組
 一般模組

==============================================
Thisworkbook 模組

 '關檔前處理程序
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'將 Secret 工作表深度隱藏
Worksheets("Secret").Visible = xlVeryHidden
'設定 Sheet1 工作表
With Worksheets("Sheet1")
    .Activate       '設為作用工作表
    .Shapes("BTN").Visible = False      '按鈕隱藏
    .Shapes("DPT").Visible = True       '說明文字框顯示
End With
Me.Save         '強迫儲存
End Sub
-------------------------------------------------------------------------------
'開檔時處理程序
Private Sub Workbook_Open()
    '將 Sheet1 工作表
    With Worksheets("Sheet1").Shapes
        .Item("BTN").Visible = True     '按鈕顯示
        .Item("DPT").Visible = False   '說明文字框隱藏
    End With
End Sub 


==============================================
'UserForm1 模組 

' [確定] 按鈕
Private Sub CommandButton1_Click()
'若輸入的帳號及密碼都是 crdotlin 即是正確
If Me.TextBox1.Text = "crdotlin" And Me.TextBox2.Text = "crdotlin" Then
    '將 Secret 工作表顯示
    ThisWorkbook.Worksheets("Secret").Visible = True
    '將 Sheet1 工作表上的 [按鈕] 隱藏
    Worksheets("Sheet1").Shapes("BTN").Visible = False
    '卸載本自訂表單
    Unload Me
Else
    '驗證錯誤處理
    myCheck
End If
End Sub

---------------------------------------------------------------------------------------
 '[清除] 按鈕
Private Sub CommandButton2_Click()
Me.TextBox1.Text = ""   '帳號資料消除
Me.TextBox2.Text = ""   '消除密碼資料
End Sub
---------------------------------------------------------------------------------------
 '驗證失敗處理程序
Private Sub myCheck()
Dim ans     '錯誤訊息回應
    '顯示錯誤訊息
    ans = MsgBox("錯誤!", vbRetryCancel + vbExclamation, "驗證失敗!")
    '檢查回應內容
    If ans = vbRetry Then       '選擇 [重試]
        Me.TextBox1.Text = ""        '帳號資料消除
        Me.TextBox2.Text = ""       '消除密碼資料
    ElseIf ans = vbCancel Then          '選擇 [取消]
        Unload Me        '卸載本自訂表單
    Else        '應該部會到這裡
        myCheck '萬一到了這裡, 再執行驗證失敗處理程序
    End If
End Sub
==============================================
 一般模組

Sub showForm()
    '如果 Secret 工作表已經打開, 退出
    If Worksheets("Secret").Visible = True Then Exit Sub
    '否則開啟 [驗證對話框]
    UserForm1.Show
End Sub
所有密碼及帳號均為"crdotlin" ==============================================


============================================== 

EXCEL的顏色代碼、顏色索引值與顏色對照表



顏色代碼表

()顏色代碼表 (可以反白複製)
aliceblue
antiquewith
aquamarine
azure
cornfloewrblue
cornsilk
cyan
darkblue
darkcyan
darkgoldenrod
darkgray
darkgreen
darkhaki
darkmagenta
darkolivegreen
darkorenge
beige
bisque
black
blanchedalmond
blue
blueviolet
brown
burlywood
cadetblue
chartreuse
chocolate
coral
darkorchid
darkred 
darksalmon
darkseagreen
darkslateblue
darkslategray
darkturquoise
darkviolet
deeppink
deepskyblue
dimgray
dodgerblue
firebrick
floralwhite
forestgreen
gainsboro
gostwhite
gold
golenrod
gray
green
greenyellow
honeydew
hotpink
indianred
ivory
khaki
lavender
lavenderblush
lawngreen
lemonchiffon
lightblue
lightcoral
lightcyan
lightgodenrod
lightgodenrodyellow
lightsteelblue
lightyellow
limegreen
linen
magenta
maroon
mediumaquamarine
mediumblue
mediumorchid
mediumpurpul
mediumseagreen
mediumslateblue
mintcream
mistyrose
moccasin
navajowhite
lightgray
lightgreen
lightpink
lightsalmon
lightseagreen
lightskyblue
lightslateblue
lightslategray
navy
navyblue
oldlace
olivedrab
orange
orengered
orchid
palegodenrod
palegreen
paleturquoise
palevioletred
papayawhip
peachpuff
peru
pink
plum
mediumspringgreen
mediumturquoise
mediumvioletred
midnightblue
powderblue
purple
red
rosybrown
royalblue
saddlebrown
salmon
sandybrown
seagreen
seashell
sienna
skyblue
slateblue
slategray
snow
springgreen
steelblue
tan
thistle
tomato
turquoise
violet
violetred
wheat
hite
whitesmoke
yellow
yellowgreen


(
)顏系代碼表 (可以反白複製)
#FFFFFF
#DDDDDD
#AAAAAA
#888888
#666666
#444444
#000000
#FFB7DD
#FF88C2
#FF44AA
#FF0088
#C10066
#A20055
#8C0044
#FFCCCC
#FF8888
#FF3333
#FF0000
#CC0000
#AA0000
#880000
#FFC8B4
#FFA488
#FF7744
#FF5511
#E63F00
#C63300
#A42D00
#FFDDAA
#FFBB66
#FFAA33
#FF8800
#EE7700
#CC6600
#BB5500
#FFEE99
#FFDD55
#FFCC22
#FFBB00
#DDAA00
#AA7700
#886600
#FFFFBB
#FFFF77
#FFFF33
#FFFF00
#EEEE00
#BBBB00
#888800
#EEFFBB
#DDFF77
#CCFF33
#BBFF00
#99DD00
#88AA00
#668800
#CCFF99
#BBFF66
#99FF33
#77FF00
#66DD00
#55AA00
#227700
#99FF99
#66FF66
#33FF33
#00FF00
#00DD00
#00AA00
#008800
#BBFFEE
#77FFCC
#33FFAA
#00FF99
#00DD77
#00AA55
#008844
#AAFFEE
#77FFEE
#33FFDD
#00FFCC
#00DDAA
#00AA88
#008866
#99FFFF
#66FFFF
#33FFFF
#00FFFF
#00DDDD
#00AAAA
#008888
#CCEEFF
#77DDFF
#33CCFF
#00BBFF
#009FCC
#0088A8
#007799
#CCDDFF
#99BBFF
#5599FF
#0066FF
#0044BB
#003C9D
#003377
#CCCCFF
#9999FF
#5555FF
#0000FF
#0000CC
#0000AA
#000088
#CCBBFF
#9F88FF
#7744FF
#5500FF
#4400CC
#2200AA
#220088
#D1BBFF
#B088FF
#9955FF
#7700FF
#5500DD
#4400B3
#3A0088
#E8CCFF
#D28EFF
#B94FFF
#9900FF
#7700BB
#66009D
#550088
#F0BBFF
#E38EFF
#E93EFF
#CC00FF
#A500CC
#7A0099
#660077
#FFB3FF
#FF77FF
#FF3EFF
#FF00FF
#CC00CC
#990099
#770077




EXCEL的顏色索引值與顏色對照表:http://www.mvps.org/dmcritchie/excel/colors.htm

關節卡卡或彈響

關節間產生的潤滑液少,關節摩擦的損耗 髖關節彈響。 一般有兩種情況,第一種是關節外彈響較常見。 發生的主要原因是髂脛束的後緣或臀大肌肌腱部的前緣增厚, 在髖關節作屈曲、內收、內旋活動時,增厚的組織在大粗隆部前後滑動而發出彈響, 同時可見到和摸到一條粗而緊的縴維帶在...