- 帖子
- 835
- 主題
- 6
- 精華
- 0
- 積分
- 915
- 點名
- 0
- 作業系統
- Win 10,7
- 軟體版本
- 2019,2013,2003
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2010-5-3
- 最後登錄
- 2024-11-14
|
9#
發表於 2013-11-26 22:19
| 只看該作者
回復 luhpro
大大我的確是要插入一些資料到目前的資料序列中 ...
a31075ha 發表於 2013-11-26 01:37 
依你的需求重寫程式如下:
以下程式放在 Module- Public bOK As Boolean
- Public rTar As Range
複製代碼 以下程式放在要插入資料的Sheet- Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
- Set rTar = Target
- ufMain.Show
- If bOK Then Cancel = True
- End Sub
複製代碼 以下程式放在 Module (更名為 ufMain, 建兩個TextBox 分別命名為 tbColG 與 tbColO, 建兩個 Buttom 分別命名為 cbCancel 與 cbOK )- Private Sub cbCancel_Click()
- bOK = False
- ufMain.Hide
- End Sub
- Private Sub cbOK_Click()
- Dim lRow&, lRows&, lI&
- Dim arData
-
- bOK = True
- If tbColO.Text = "" Then tbColO.Text = tbColG.Text
- With rTar.Parent
- icol = 7
- arData = Split(tbColG.Text, Chr(13) & Chr(10))
- lRows = UBound(arData, 1)
- lRow = rTar.Row
- .Range(.Cells(lRow, icol), .Cells(Rows.Count, icol).End(xlUp)).Copy .Cells(lRow + lRows + 1, icol)
- .Range(.Cells(lRow, icol), .Cells(lRow + lRows, icol)) = ""
- .Cells(lRow, icol).Resize(lRows + 1) = Application.Transpose(arData)
-
- icol = 15
- arData = Split(tbColO.Text, Chr(13) & Chr(10))
- lRows = UBound(arData, 1)
- lRow = rTar.Row
- .Range(.Cells(lRow, icol), .Cells(Rows.Count, icol).End(xlUp)).Copy .Cells(lRow + lRows + 1, icol)
- .Range(.Cells(lRow, icol), .Cells(lRow + lRows, icol)) = ""
- .Cells(lRow, icol).Resize(lRows + 1) = Application.Transpose(arData)
-
- With ufMain
- .tbColG.Text = ""
- .tbColO.Text = ""
- .Hide
- End With
- End With
- End Sub
複製代碼 觸發方式為 :
1. 任意 Mark 儲存格並對 Mark 的區域按滑鼠右鍵. (程式只會用到第一個儲存格的列號, 作為插入資料的起始列號)
2. 程式會開一個 UserForm 內含兩個輸入區, 分別用於輸入要插入 欄G 與 欄O 的資料.
(若要插入的資料不只一筆, 請按 Ctrl+Enter 換列輸入, 每一列視為一筆資料, 兩欄的資料 "筆數" 可以不相等,
若 欄O的輸入區 未輸入資料, 則會將 欄G 的資料 Copy 過去 欄O , 即兩欄都會新增相同的資料.)
3. 若按下 "取消" 按紐, UserForm 會關閉, 接著恢復顯示一般 "在儲存格按右鍵" 後會顯示的快捷列 (即仍有保留原先按滑鼠右鍵的功能).
4. 若按下 "確定" 按紐, 會先執行插入資料的作業, 再關閉 UserForm, 且快捷列改為不顯示.
範例程式如下:
MoveVol-a.zip (13.71 KB)
|
|