Board logo

標題: [發問] 貼入值VBA疑問 [打印本頁]

作者: yc1031    時間: 2020-6-18 17:02     標題: 貼入值VBA疑問

VBA CODE的原始來源 : https://alice57.pixnet.net/blog/post/23273559

大家好, 我在網路找到個貼入值的VBA, 修改後, 有幾個地方不明白, 再請教一下各位

1. 紫色字裡的"0 + 16"  這個是什麼意思呢?
2. 在COPY到dSht , 原始的CODE是".Range("B2:B" & y).Copy MySht.[C2]", 但貼到C欄時, 該欄位的格線都會被刪掉,  這個要怎麼改呢?
* 我是改用
dSht.Range("B2:B" & y).Copy
MySht.Range("C2:J1000").PasteSpecial Paste:=xlPasteValues
有成功, 只是想知道在原始的.Range("B2:B" & y).Copy MySht.[C2]       <---- 在這個CODE下要怎麼寫, 只貼入值就好, 不要動到格式

感謝各位!


Sub 貼櫃號()
Dim MySht As Worksheet, dSht As Worksheet, y&
  Set MySht = Sheets("出貨後")
  Set dSht = Sheets("出貨明細")
  With dSht
  MySht.Range("C2:C10000").Clear   '清除原有資料
  dSht.AutoFilterMode = False    '解除篩選模式
  y = dSht.Range("B65536").End(xlUp).Row
  If y < 2 Then MsgBox "※來源表〔B欄〕無資料! ", 0 + 16: Exit Sub
  '↑先解除篩選,再檢測資料尾列列號,若篩選中,檢測列號會有誤差
  If WorksheetFunction.CountIf(dSht.Range("A2:A" & y), "1") = 0 Then
      MsgBox "※來源表〔A欄〕無〔1〕篩選值! ", 0 + 16: Exit Sub
  End If

  '↑檢測〔1〕數
  '注意:"~*"才能單選〔*〕,否則其它文字(例如:A.B.C)也會篩選進來

      dSht.Range("$A$1:$AB$1500").AutoFilter Field:=1, Criteria1:="1"
      dSht.Range("B2:B" & y).Copy
      MySht.Range("C2:J1000").PasteSpecial Paste:=xlPasteValues
     '原始的CODE是".Range("B2:B" & y).Copy MySht.[C2]", 但貼到C欄時, 該欄位的格線都會被刪掉

      dSht.AutoFilterMode = False '解除篩選模式
      MySht.AutoFilterMode = False '解除篩選模式
  End With
作者: n7822123    時間: 2020-6-19 01:46

本帖最後由 n7822123 於 2020-6-19 02:01 編輯

回復 1# yc1031


需求1:
1. 紫色字裡的"0 + 16"  這個是什麼意思呢?

Msgbox 用法的 Button參數值~~~ 16 = "顯示 Critical Message 圖示" (0可以省略)

請參考下圖微軟說明


[attach]32190[/attach]

可以混合搭配不同形式,比如說1+16+256+16384

256 代表第2個按鈕是預設值,直接按下Enter,就是按下第2個按鈕(以此例來說會是"取消")

以下程式你可以執行看看,就會懂了

共有16個不同的Msgbox 視窗


Sub PlayMsgbox()
Arr = Array(1, 2, 3, 4)
Brr = Array(16, 32, 48, 64)
For A = 0 To UBound(Arr): For B = 0 To UBound(Brr)
  n = n + 1
  MsgBox "Test-" & n, Arr(A) + Brr(B)
Next: Next
End Sub


也許下面的程式你比較看得懂,兩者是一樣的

Sub PlayMsgbox2()
n = n + 1: MsgBox "Test-" & n, 1 + 16
n = n + 1: MsgBox "Test-" & n, 2 + 16
n = n + 1: MsgBox "Test-" & n, 3 + 16
n = n + 1: MsgBox "Test-" & n, 4 + 16

n = n + 1: MsgBox "Test-" & n, 1 + 32
n = n + 1: MsgBox "Test-" & n, 2 + 32
n = n + 1: MsgBox "Test-" & n, 3 + 32
n = n + 1: MsgBox "Test-" & n, 4 + 32

n = n + 1: MsgBox "Test-" & n, 1 + 48
n = n + 1: MsgBox "Test-" & n, 2 + 48
n = n + 1: MsgBox "Test-" & n, 3 + 48
n = n + 1: MsgBox "Test-" & n, 4 + 48

n = n + 1: MsgBox "Test-" & n, 1 + 64
n = n + 1: MsgBox "Test-" & n, 2 + 64
n = n + 1: MsgBox "Test-" & n, 3 + 64
n = n + 1: MsgBox "Test-" & n, 4 + 64
End Sub



需求2:
2. 在COPY到dSht , 原始的CODE是".Range("B2:B" & y).Copy MySht.[C2]", 但貼到C欄時, 該欄位的格線都會被刪掉,  這個要怎麼改呢?
* 我是改用
dSht.Range("B2:B" & y).Copy
MySht.Range("C2:J1000").PasteSpecial Paste:=xlPasteValues
有成功, 只是想知道在原始的.Range("B2:B" & y).Copy MySht.[C2]       <---- 在這個CODE下要怎麼寫, 只貼入值就好, 不要動到格式

可以改成

MySht.[C2].Resize(y - 1) =.Range("B2:B" & y).Value




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)