Board logo

標題: [發問] 欄位貼上問題 [打印本頁]

作者: bridetobe    時間: 2014-7-25 14:32     標題: 日期的搜尋方法

想請問日期的搜尋方法
是不是跟一般搜尋不太一樣?

[attach]18760[/attach]

問題:
按下讀出 輸入日期 的日期格式應該是要怎麼樣
ex打入2014/7/1 會將sheet2的7/1的所有資料都更新至Sheet1第三列開始

所以想問日期的搜尋方法是怎麼做
作者: GBKEE    時間: 2014-7-26 15:45

回復 1# bridetobe
  1. Private Sub CommandButton1_Click()
  2.     Dim a_date  ' As String
  3.     a_date = InputBox("輸入日期(例2014/7/1):")
  4.     With Sheet2
  5.         Set A = .Range("A2", .[a2].End(xlDown)).Find(what:=a_date, LookIn:=xlValues) '搜尋文字
  6.     End With
  7.     If Not A Is Nothing Then
  8.         MsgBox ("有")
  9.     Else
  10.         MsgBox ("沒有資料")
  11.     End If
  12. End Sub
  13. Private Sub CommandButton2_Click()
  14.     Dim a_date As Date
  15.     a_date = InputBox("輸入日期(例2014/7/1):")
  16.     With Sheet2
  17.         Set A = .Range("A2", .[a2].End(xlDown)).Find(what:=a_date, LookIn:=xlFormulas) '搜尋公式
  18.     End With
  19.     If Not A Is Nothing Then
  20.         MsgBox ("有")
  21.     Else
  22.         MsgBox ("沒有資料")
  23.     End If
  24. End Sub
複製代碼

作者: bridetobe    時間: 2014-7-28 10:02

回復 2# GBKEE

謝謝版主回答~~
那我可以在請問一下
Set A = .Range("A2", .[a2].End(xlDown)).Find(what:=a_date, LookIn:=xlValues) '搜尋文字

這個範圍部分的 "A2", .[a2].End(xlDown))用法嗎

以及button1和2的差別

[attach]18773[/attach]
我將搜尋到的資料 貼到sheet1的第三列開始
是哪裡的寫法錯誤
讓他無止盡的貼下去
而且sheet2的品名#702 也就是第一項沒有貼到??

不好意思問題很多><
作者: bridetobe    時間: 2014-7-28 10:06

回復 2# GBKEE


    [attach]18774[/attach]

抱歉 夾帶錯檔案 這個才對
作者: GBKEE    時間: 2014-7-28 17:21

回復 4# bridetobe
試試看
  1. Private Sub CommandButton1_Click()
  2.     Dim srcrange As Range
  3.     Dim a_date  ' As String
  4.     Dim fndrange, fstaddress, i
  5.     a_date = InputBox("輸入日期(例2014/7/1):", , "2014/7/1")
  6.     If a_date = "" Then Exit Sub  '取消時
  7.     With Sheet2
  8.     Set srcrange = .Range("A2", .[a2].End(xlDown))
  9.         Set fndrange = srcrange.Find(what:=a_date, AFTER:=srcrange(srcrange.Count), LookIn:=xlValues) '搜尋文字
  10.         'After     選擇性的 Variant。  指定儲存格,尋找將從該儲存格之後開始。此儲存格對應於從使用者介面尋找時的使用中儲存格位置。
  11.         '注意 After 必須是尋找範圍中的單個儲存格。請記住尋找是從該儲存格之後   開始的;必須等到該方法循環回到此儲存格時,才會搜尋其內容。
  12.         '如果未指定此引數,搜尋將從範圍的左上角儲存格之後開始
  13.     End With
  14.     If Not fndrange Is Nothing Then
  15.         'fstaddress = fndress = fndrange.Address  '這裡錯誤 讓他無止盡的貼下去
  16.         fstaddress = fndrange.Address
  17.         i = 3
  18.         Do
  19.         Cells(i, 1).Value = fndrange.Offset(, 1)
  20.         Cells(i, 2).Value = fndrange.Offset(, 2)
  21.         Cells(i, 3).Value = fndrange.Offset(, 3)
  22.         Cells(i, 4).Value = fndrange.Offset(, 4)
  23.         Cells(i, 5).Value = fndrange.Offset(, 5)
  24.         Cells(i, 6).Value = fndrange.Offset(, 6)
  25.         Cells(i, 7).Value = fndrange.Offset(, 7)
  26.         Set fndrange = srcrange.FindNext(AFTER:=fndrange)
  27.         i = i + 1
  28.         Loop Until fndrange.Address = fstaddress
  29.     Else
  30.         MsgBox ("沒有資料")
  31.     End If
  32. End Sub
複製代碼

作者: bridetobe    時間: 2014-7-29 09:04

回復 5# GBKEE

謝謝
解決了無止盡貼下去了
可是發現不只貼上7/1號的
還有夾雜一些其他的日期的
7/7 等等的 貼到了7xx多列
作者: GBKEE    時間: 2014-7-30 15:14

本帖最後由 GBKEE 於 2014-7-30 15:15 編輯

回復 6# bridetobe
Find 會根據上ㄧ次Find的參數來搜尋
  1. Private Sub CommandButton1_Click()
  2.     Dim srcrange As Range
  3.     Dim a_date  As String
  4.     Dim fndrange As Range, fstaddress As String, i As Integer
  5.     a_date = InputBox("輸入日期(例2014/7/1):", , "2014/7/1")
  6.     If a_date = "" Then Exit Sub  '取消時
  7.     With Sheet2
  8.     Set srcrange = .Range("A2", .[a2].End(xlDown))
  9.         srcrange.Interior.ColorIndex = xlNone
  10.         Set fndrange = srcrange.Find(what:=a_date, AFTER:=srcrange(srcrange.Count), LookIn:=xlValues, lookat:=xlWhole) '搜尋文字
  11.         'After     選擇性的 Variant。  指定儲存格,尋找將從該儲存格之後開始。此儲存格對應於從使用者介面尋找時的使用中儲存格位置。
  12.         '注意 After 必須是尋找範圍中的單個儲存格。請記住尋找是從該儲存格之後   開始的;必須等到該方法循環回到此儲存格時,才會搜尋其內容。
  13.         '如果未指定此引數,搜尋將從範圍的左上角儲存格之後開始
  14.                
  15.         'LookAt  選擇性的 Variant。可為下列 XlLookAt 常數之一:xlWhole 或 xlPart。
  16.         
  17.     End With
  18.     If Not fndrange Is Nothing Then
  19.         'fstaddress = fndress = fndrange.Address  '這裡錯誤 讓他無止盡的貼下去
  20.         fstaddress = fndrange.Address
  21.         i = 3
  22.         Do
  23.             fndrange.Interior.Color = vbRed
  24.             Cells(i, 1).Resize(1, 7) = fndrange.Offset(, 1).Resize(1, 7).Value
  25.             Set fndrange = srcrange.FindNext(AFTER:=fndrange)
  26.             i = i + 1
  27.         Loop Until fndrange.Address = fstaddress
  28.     Else
  29.         MsgBox ("沒有資料")
  30.     End If
  31. End Sub
複製代碼

作者: bridetobe    時間: 2014-8-4 16:06

回復 7# GBKEE


解決了
非常謝謝版大~~~
作者: bridetobe    時間: 2014-8-7 09:19     標題: 欄位貼上問題

[attach]18847[/attach]

想請問一下
按下讀出可以將8/6的資料全部讀取出來
然後利用"操作"工作表 更改8/7的存貨

按下寫入可以
跳出一個inputbox詢問 要增加為幾月幾號的資料
再將更改完的資料(除了A1:G2)的資料
[attach]18848[/attach]
(圖中紅框框部分)
往"存貨資料"工作表B欄最下面往下貼
[attach]18849[/attach]
(圖中紅線部分)
然後將Inputbox內的日期貼到與資料同行
[attach]18850[/attach]
(將圖中A欄空白資料用inputbox內的內容填滿)
請問這些步驟這要怎麼完成?

原本有想過 使用巨集錄製
將整個操作工作表的內容
複製到其他工作表 然後把標題列(A1:G2)刪除
再複製到存貨資料工作表內
但怎麼寫都寫不出來
還請各位大大幫幫忙
作者: GBKEE    時間: 2014-8-7 10:43

本帖最後由 GBKEE 於 2014-8-7 10:47 編輯

回復 9# bridetobe
  1. Private Sub CommandButton1_Click()
  2.     Dim srcrange As Range
  3.     Dim a_date  As String
  4.     Dim fndrange As Range, fstaddress As String, i As Integer
  5.     a_date = InputBox("輸入日期(例2014/7/1):", , "2014/7/1")
  6.     Application.ScreenUpdating = False
  7.    '******************
  8.     Range("A3", Range("A3").End(xlDown)).Resize(, 7).ClearContents
  9.     '*****************
  10.     If a_date = "" Then Exit Sub
複製代碼
  1. Private Sub CommandButton2_Click()
  2.    Dim Rng As Range
  3.    With Sheets("操作")
  4.        Set Rng = .Range("A3", .Range("A3").End(xlDown)).Resize(, 7)
  5.        With Sheets("存貨資料").Range("B1").End(xlDown).Offset(1)
  6.             .Resize(Rng.Rows.Count, Rng.Columns.Count) = Rng.Value
  7.             .Offset(, -1).Resize(Rng.Rows.Count) = Sheets("操作").[b1]
  8.         End With
  9.     End With
  10. End Sub
複製代碼

作者: Hsieh    時間: 2014-8-7 10:58

回復 9# bridetobe
  1. Private Sub CommandButton2_Click()
  2. Rng = Range([A3:G3], [A3:G3].End(xlDown)).Value  '資料讀入陣列
  3. With Sheets("存貨資料")
  4. d = InputBox("輸入日期(例2014/7/1):", , Format(Application.Max(.[A:A]) + 1, "yyyy/m/d"))  '預設為最大日期加1
  5. If d = "" Then Exit Sub  '取消輸入
  6. Set A = .Cells(.Rows.Count, 1).End(xlUp).Offset(1)  '找到資料尾的下一列A欄位置
  7. A.Offset(, 1).Resize(UBound(Rng), 7) = Rng  '將資料寫入工作表
  8. A.Resize(UBound(Rng), 1) = d   'A欄寫入日期
  9. End With
  10. End Sub
複製代碼

作者: bridetobe    時間: 2014-8-7 11:28

回復 10# GBKEE

真的非常謝謝!
寫入欄位可以使用了
結果讀出變成無法使用??
作者: bridetobe    時間: 2014-8-7 11:31

回復 11# Hsieh


也謝謝版大~~

你們兩個的方法都可以

我一直膩在最基礎的寫法
一直想不到該怎麼用

真的非常謝謝兩位
作者: GBKEE    時間: 2014-8-7 15:49

結果讀出變成無法使用??
bridetobe 發表於 2014/8/7 11:28
  1. Private Sub CommandButton2_Click()
  2.    Range("A59").Select
  3.     Selection.CurrentRegion.Select
  4.     Selection.Copy
  5.     Sheets("Sheet4").Select
  6.     With Sheet4
  7.         ActiveSheet.Paste
  8.         'Range("A1:G2").Select   '這裡出錯
  9.         '這CommandButton2是"操作"工作表[物件模組]的程序
  10.         'Range("A1:G2").Select是"操作"工作表的Range.Select,不是ActiveSheet的Range.Select
  11.         
  12.         '如CommandButton2_Click()程式碼複製在一般模組
  13.         '這Range是ActiveSheet的Range
  14.     .Range("A1:G2").Select  '前面的. 表為With Sheet4的物件,屬性..
  15.     Application.CutCopyMode = False
  16.     Selection.ClearContents
  17.     Range("A4").Select
  18.     Selection.CurrentRegion.Select
  19.     Selection.Copy        
  20. End With
  21. End Sub
複製代碼





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