被動提示:輸入錯誤數值時彈出提示訊息盒, 選上格子時提示輸入選項.
主動提示:顯示訊息在附近格子上

做法:
| A | 快速Excel使用技巧 | 最後更新 | |
| 檔案管理 | |||
| 輸入處理 | |||
| 12-04-29 | ||
13-01-20 | |||
| 表格/報表處理 | |||
| 12-05-20 12-10-17 12-10-23 12-10-31 12-10-29 12-10-27 12-10-27 | ||
| B | Excel 公式 | 12-09-30 | |
| C | Excel Barcode運用 | ||
| D | Excel疑難排解 | 12-07-18 | |
| E | VBA 儲物室 | 12-05-03 | |
| F | VBA 與 SQL | 12-06-30 12-07-02 | |
| G | Excel 2010-2013相關 | 12-07-22 12-08-05 12-05-09 | |
| H | SQL 工具箱 | 12-05-03 |
以下介紹的都是一些又小(又老)的技巧或習慣,
一打開Excel時,什至是在Windows預覽,
就可以知道Excel檔裡有些什麼.
而且多數只花數秒時間,但可惜會實行的人比較少.
1. 把游標放在當眼處
通常標題都是放在頂端的行數,
完成改動後按一下CTRL+HOME,就可以把游標放到左上方.
下次打開時就可以立即看到標題
Timeline 是一個新控件, 給客戶選出1段連續的時間, 用來篩選顯示.
如下圖下方結算日的選項.
在2010時用過Slicer(交叉分析篩選器)的朋友, Timeline可以稱為Slicer的日期版.
如下圖,Slicer用來選擇想看的 "售貨員", Timeline 則可以篩選結算日
資料 >資料工具> Flash Fill
根據第1個輸入的例子, 從資料欄自動拆到其他欄位.
基本上就是半自動版本的"資料剖析"
例如下圖,有一欄位"姓名"(B欄). 現在想把姓和名分拆出來.
1. 先在 C2 和 D2分別輸入 "陳"和 "小明" (配合B2的"陳小名")
Dim Conn As ADODB.Connection Dim sConnect As String Dim strSqlInstance As String Dim strSqlDB As String Dim strSqlUser As String Dim strSqlPWD As String strSqlInstance = "SERVER_NAME\INSTANCE" 'SQL SERVER實例 strSqlDB = "DATABASE NAME" '數據庫名稱 strSqlUser = "SA" 'SQL實例用戶名 strSqlPWD = "PASSWORD" 'SQL實例用戶密碼 sConnect = "PROVIDER=SQLOLEDB;" sConnect = sConnect & "DATA SOURCE=" & strSqlInstance & ";INITIAL CATALOG=" & strSqlDB & ";" sConnect = sConnect & " User ID=" & strSqlUser & ";Password=" & strSqlPWD & ";" Set Conn = New ADODB.Connection Conn.ConnectionString = sConnect Conn.Open … Conn.Close
sConnect = sConnect & " INTEGRATED SECURITY=sspi;"來取代
sConnect = sConnect & " User ID=" & strSqlUser & ";Password=" & strSqlPWD & ";"
Sub subGetTableValues()
Dim Conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim intColCounter As Integer
Dim sConnect As String
Dim strSqlInstance As String
Dim strSqlDB As String
Dim strSql As String
strSqlInstance = "SERVER_INSTANCE"
strSqlDB = "database"
sConnect = "PROVIDER=SQLOLEDB;"
sConnect = sConnect & "DATA SOURCE=" & strSqlInstance & ";INITIAL CATALOG=" & strSqlDB & ";"
sConnect = sConnect & " INTEGRATED SECURITY=sspi;"
'Establish connection
Set Conn = New ADODB.Connection
strSql = "SELECT * FROM Information_Schema.tables" 'SQL在這裡定義,可加上 where group by...
With Conn
.ConnectionString = sConnect
.CursorLocation = adUseClient
.Open
.CommandTimeout = 0
Set rs = .Execute(strSql)
End With
Worksheets("Data").Cells.Clear
If rs.RecordCount > 0 Then '如果有數據
'寫出欄名
For intColCounter = 0 To rs.Fields.Count - 1
Worksheets("Data").Range("A1").Offset(0, intColCounter) = rs.Fields(intColCounter).Name
Next
'寫出內容
Worksheets("Data").Range("A2").CopyFromRecordset rs
Else
MsgBox ("找不到數據")
End If
rs.Close
Conn.Close
Set rs = Nothing
Set Conn = Nothing
End Sub
另一個方法可代替CopyFromRecordset,一格一格寫上.
Application.ScreenUpdating = False '先關掉顯示,寫好再補上,可以省"點"時間
Dim intRow as long, intCol as long
intRow = 0
rs.MoveFirst
Do While rs.EOF = False
For intCol = 0 To rs.Fields.Count - 1
Range("A2").Offset(intRow, intCol).Value = rs.Fields(intCol).Value
Next intCol
rs.MoveNext
intRow = intRow + 1
Loop
Application.ScreenUpdating = True
| string input | integer input | integer output |
| abc | 10 | 999 |
SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS OFF GO CREATE PROCEDURE usp_test_vba @astring_input varchar(50), @aint_input integer, @aint_output integer output AS set @aint_output = 999 select @astring_input as [string input], @aint_input as [integer input], @aint_output as [integer output] RETURN 777 GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO
Dim Conn As ADODB.Connection
Dim ADODBCmd As ADODB.Command
Dim rs As ADODB.Recordset
Dim sConnect As String
Dim intArgOutput As Integer
Dim intReturn As Integer
intArgOutput = 30
spName = "usp_test_vba"
Dim strSqlInstance As String
Dim strSqlDB As String
strSqlInstance = "SQL SERVER INSTANCE"
strSqlDB = "DATABASE NAME"
sConnect = "PROVIDER=SQLOLEDB;"
sConnect = sConnect & "DATA SOURCE=" & strSqlInstance & ";INITIAL CATALOG=" & strSqlDB & ";"
sConnect = sConnect & " INTEGRATED SECURITY=sspi;"
Set Conn = New ADODB.Connection
Conn.ConnectionString = sConnect
Conn.Open
Set ADODBCmd = New ADODB.Command
Conn.CommandTimeout = 0
With ADODBCmd
.ActiveConnection = Conn
.CommandText = spName
.CommandType = adCmdStoredProc
.Parameters.Refresh
.Parameters(1).Value = "abc" '放入第1個參數
.Parameters(2).Value = 5 '放入第2個參數
.Parameters(3).Value = intArgOutput '放入第3個參數
Set rs = .Execute()
intArgOutput = .Parameters(3).Value '回傳第3個參數,經SP處理後數值, 即999
intReturn = .Parameters(0).Value '回傳SP RETURN出來的數值 即777
End With
Worksheets("Data").Cells.Clear
If Not (rs.EOF) Then
For intColCounter = 0 To rs.Fields.Count - 1
Worksheets("Data").Range("A1").Offset(0, intColCounter) = rs.Fields(intColCounter).Name
Next
Worksheets("Data").Range("A2").CopyFromRecordset rs
Else
MsgBox ("沒有回傳表")
End If
rs.Close
Set rs = Nothing
Conn.Close
Set Conn = Nothing
IV. 拿出儲存程序(SP)結果集, SP上有臨時表 (#TEMP TABLE)的問題SET NOCOUNT ON
Public Function YearStartShort(WhichYear As Integer, WhichWD As Integer) As Date
Dim wd As Integer
Dim NewYear As Date
YearStartShort = DateSerial(WhichYear, 1, 1)
wd = WeekDay(NewYear)
YearStartShort= DateAdd("d", WhichWD - wd + IIf(WhichWD - wd >= 0, 0, 7), NewYear)
End Function
Private Sub Workbook_Open() .... ThisWorkbook.Saved = True End Sub
有沒有試過,當打開一星期前的Excel檔來看時,不知從那裡看起?
又或是,明明是自己加上的公式,看過半天也不知公式是在攪什麼飛機.
以下將會介紹一些方法,可以在Excel裡留些記號. 其他人也可以容易看懂
A 定義名稱A I. 個別定義名稱
公作上很多時候會收到客戶寄來的xls.
看了一眼,除WTF之外,根本想不出什麼來.
(而且,實際上收到的公式不比這個簡單)
其實只要用上定義名稱,公式就可以變得清晰
如下面公式.
在列印預覽時想一併看看邊界和拉動,
可以先按下右手面下角這個位置(紅箭) "顯示邊界"按鈕
按下"顯示邊界"按鈕後,可以拉扯預覽上的 虛線 (藍箭) 來調整邊界.
本編最新更新:2012-05-08