標題:
請幫忙看一下插入欄這個程式問題出在哪
[打印本頁]
作者:
Genie
時間:
2012-9-21 09:36
標題:
請幫忙看一下插入欄這個程式問題出在哪
如 Excel 檔所附的 希望能做到 "選第一列"、"選第二列" 般的效果
但現在程式寫好了 執行時卻沒有插入空白欄
因為沒有出現錯誤訊息 所以我也不知道哪裡有問題
希望能幫我看一下
謝謝∼
[attach]12573[/attach]
作者:
GBKEE
時間:
2012-9-21 16:13
回復
1#
Genie
選第二列 的邏輯看不懂
選第一列 如下
Sub 插入欄()
Dim i As Integer, r As String, Rng As Range, E As Range
Dim iRow As Integer
If iRow > 3 Then Exit Sub '此程式碼沒作用?? : iRow 程式中你尚未給值
Application.ScreenUpdating = False
Do
r = InputBox("輸入插入欄數,必須 >= 1 ", "插入欄數", "1")
Loop Until r <> "" And r >= 1
For i = 2 To [A2].End(xlToRight).Column - 1
If Cells(1, i) <> Cells(1, i + 1) Then
If Rng Is Nothing Then Set Rng = Cells(1, i) Else Set Rng = Union(Cells(1, i), Rng)
End If
Next
If Not Rng Is Nothing Then
For Each E In Rng.Cells
E.Offset(, 1).Resize(, r).EntireColumn.Insert
Next
End If
Application.ScreenUpdating = True
End Sub
複製代碼
作者:
Genie
時間:
2012-9-21 16:32
不管是選哪一列
就是在相同的文字或值後面插入 >1 的空白欄
如選第二列
那就在 1、2、1、2、3、4 的後面插入空白欄
作者:
GBKEE
時間:
2012-9-21 17:41
回復
3#
Genie
試試看
Sub 插入欄()
Dim i As Integer, r As String, Rng As Range, E As Range
Dim iRow As Integer
iRow = Selection.Cells(1).Row
If iRow > 3 Or Selection.Cells(1) = "" Then Exit Sub
Application.ScreenUpdating = False
Do
r = InputBox("輸入插入欄數,必須 >= 1 ", "插入欄數", "1")
Loop Until r <> "" And r >= 1
Set Rng = Cells(iRow, Columns.Count).End(xlToLeft)
Do
If Rng <> Rng.Offset(, -1) Then
Set Rng = Rng.Offset(, -1)
Rng.Offset(, 1).EntireColumn.Resize(, r).Insert
Else
Set Rng = Rng.Offset(, -1)
End If
Loop While Rng.Column > 2
Application.ScreenUpdating = True
End Sub
複製代碼
PS 按回覆鍵 回文 是一種禮貌
作者:
Genie
時間:
2012-9-21 23:55
回復
4#
GBKEE
這個程式若要在同個 sheet 連續執行兩次的話
是不是會把第一次執行的空白欄也當做一欄再插入?
例如先選第一列插入空白欄 再選第二列插入空白欄
結果會把第一列插入的空白欄 也當做一欄插入
如附檔所示
請問是否可以不把第一列的空白欄也當作一欄做插入呢?
謝謝∼
[attach]12585[/attach]
作者:
GBKEE
時間:
2012-9-22 14:52
回復
5#
Genie
你要在同一Sheet, 作兩次的插入欄,如附檔上的範例,
不好意思,我想不出程式碼的邏輯要如何寫.
作者:
Hsieh
時間:
2012-9-22 18:37
回復
1#
Genie
你的意思不知是否如此
Sub InsertColumn()
Dim k
r = ActiveCell.Row
10
k = InputBox("輸入欲插入欄數", "插入欄數", 1)
If Not IsNumeric(k) Then MsgBox "請輸入有效數值 ": GoTo 10
i = Cells(r, 256).End(xlToLeft).Column
Do Until i = 2
If Cells(r, i) <> Cells(r, i - 1) And Cells(r, i - 1) <> "" And Cells(r, i) <> "" Then Cells(r, i).EntireColumn.Insert
i = i - 1
Loop
End Sub
複製代碼
作者:
Genie
時間:
2012-9-24 11:31
回復
7#
Hsieh
可以做到我想要的樣子了
不過只可以插入一欄而已是嗎?
因為我輸入 2 要插入兩欄
但執行出來的結果只有插入一欄而已
作者:
Hsieh
時間:
2012-9-24 18:21
回復
8#
Genie
忘了有多欄要求
Sub InsertColumn()
Dim k
r = ActiveCell.Row
10
k = InputBox("輸入欲插入欄數", "插入欄數", 1)
If Not IsNumeric(k) Then MsgBox "請輸入有效數值 ": GoTo 10
i = Cells(r, 256).End(xlToLeft).Column
Do Until i = 2
If Cells(r, i) <> Cells(r, i - 1) And Cells(r, i - 1) <> "" And Cells(r, i) <> "" Then Cells(r, i).Resize(, k).EntireColumn.Insert
i = i - 1
Loop
End Sub
複製代碼
作者:
Genie
時間:
2012-9-25 15:25
謝謝 GBKEE 和 Hsieh 版大的幫忙
解決了我的問題
也讓我學習不同的寫法
這幾個程式我會好好研究的
非常謝謝幫忙∼
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)