返回列表 上一主題 發帖

range離奇問題

range離奇問題

不好意思,想問一個很離奇的問題
就是指定這個對象時
Range("A" & i * 100 + 88 & ":l100")
所呈現的範圍卻是
$A$100:$L$188

但指定這個對象
Range("A" & i * 100 + 88 & ":l1000")
所呈現的範圍又是
$A$188:$L$1000

請問問題出在哪裡?

已解決了!謝謝你!

TOP

回復 12# HSINLI


    Range("a" & (i - 1) * 100 + 88 & ":l " & i * 100 + 88).Copy j

":l " 改成  ":l"  右端你多了一個空白

.Copy   j   的用法錯誤,  請字型參考  https://msdn.microsoft.com/zh-tw/library/office/ff837760.aspx

TOP

您好,謝謝你的回答,
我試過了目前改成
Range("a" & (i - 1) * 100 + 88 & ":l " & i * 100 + 88).Copy j
但還是卡在這邊無法執行耶><

TOP

回復 9# HSINLI


    "i - 1 * 100 + 88"是為負值range不可能有負值的!

TOP

i - 1 * 100 應該是寫成   (i - 1) * 100

TOP

不好意思,想要再詢問一下
range這樣的寫法出了什麼問題嗎?
Range("a" & i - 1 * 100 + 88 & ":l " & i * 100 + 88).Copy j
為什麼每次執行的時候都出現1004錯誤

整組code見附件,主要是要用vba叫ie,複製貼上其內容至excel
(會這樣操作是因為該網址無法用querytable下載)
  1. Sub 擷取yahoofinanceetf()

  2. Dim j As Range
  3. Dim i As Integer
  4. Dim url As String

  5.     Cells.Clear
  6.    
  7.     Application.ScreenUpdating = False
  8.     Set ie = CreateObject("internetexplorer.application")

  9. For i = 1 To 16 '欲複製下載的網頁頁數有16頁
  10.     With ie
  11.         .Visible = False
  12.         .Navigate "http://finance.yahoo.com/etf/lists/?mod_id=mediaquotesetf&tab=tab4&scol=avgcap&stype=desc&rcnt=100&page=" & i

  13.     Do While .ReadyState <> 4
  14.         DoEvents
  15.     Loop
  16.         .ExecWB 17, 2
  17.         .ExecWB 12, 2
  18.    End With
  19.   If i = 1 Then '如果是第一頁的話從A1開始貼
  20.         Range("A1").Select
  21.         ActiveSheet.PasteSpecial Format:="HTML", Link:=False, DisplayAsIcon:= _
  22.                 False, NoHTMLFormatting:=True
  23.    
  24.     Range("a87:l187").Copy Range("a1") '因為是全頁複製故只將所需的表格複製貼上到指定位置
  25.     Range("a102:l302").Clear '除以上所需外之後的內容清除

  26. Else '如果是第二頁之後的內容
  27.      Set j = Cells(Rows.Count, "a").End(xlUp).Offset(1) '將range J指定在使用過儲存格的下一個空白儲存格
  28.       j.Select
  29.       ActiveSheet.PasteSpecial Format:="HTML", Link:=False, DisplayAsIcon:= _
  30.                 False, NoHTMLFormatting:=True
  31.    Range("a" & i - 1 * 100 + 88 & ":l " & i * 100 + 88).Copy j  '將所需的資料貼至range j
  32.    j.EntireRow.Delete '將那一行整行刪除,因為是標題列,前面已有同樣內容
  33.    Range("a" & i * 100 + 2 & ":l65536").Clear '除所需部份,其餘內容清除
  34.    Set j = Nothing '清除j的賦值,下次循環再重新定義新的range j
  35.   End If
  36. Next i

  37. ie.Quit

  38. End Sub
複製代碼

TOP

喔喔!了解了!
所以說excel會自動將數字小得換到前方,但是所選取的範圍一樣沒有變更
是這樣嗎??

TOP

不好意思, 上面寫得也點雜
想修改已經超過3分鐘無法修改


你誤會我的意思
版大他就是無法理解為何  Range("A10:c1").Address  為何不是傳回 "A10:c1" 而是傳回 "A1:c10"
我要告訴他的是如果  Range("A10:c1").Address   傳回的是  "A10:c1"
將會引發下列的錯誤
IF Range("A1:c10").Address  <> Range("A10:c1").Address  Then
    Msgbox "這是不同的選取區"
End iF
把 Range("A1:c10").Address  直接以值來替代就變為如下
IF ("A1:c10") <> "A10:c1" Then
    Msgbox "這是不同的選取區"
End iF

這也就是我認為 EXCEL 為何不傳回 "A10:c1" 的原因

你...沒看清楚我的意思

TOP

回復 5# lpk187

你誤會我的意思
版大他其實就是問
Range("A10:c1").Address = 為何 EXCEL 不是傳回 "A10:c1" 反而傳回  "A1:c10"
Range("A1:c10").Address = "A1:c10"

我要跟他說 Range("A10:c1") 和 Range("A1:c10") 其實是相同的選取區
如果 EXCEL 它設計成 一個傳回 "A1:c10" 另一個卻傳回"A10:c1"
將導致發生以下的錯誤現象
IF "A1:c10" <> "A10:c1" Then   (  if Range("A1:c10").Address  <> Range("A10:c1").Address  then )
    Msgbox "這是不同的選取區"
End iF

所以 EXCEL 才會把 Range("A10:c1").Address = 改成傳回  "A1:c10"
這樣就不會出現以上的問題

版大他就是無法理解為何  Range("A10:c1").Address  為何不是傳回 "A10:c1" 而是傳回 "A1:c10"
我要告訴他的是如果  Range("A10:c1").Address   傳回的是  "A10:c1"
將會引發下列的錯誤
IF Range("A1:c10").Address  <> Range("A10:c1").Address  Then
    Msgbox "這是不同的選取區"
End iF
這也就是我認為 EXCEL 為何不傳回 "A10:c1" 的原因

你...沒看清楚我的意思

TOP

        靜思自在 : 有智慧才能分辨善惡邪正;有謙虛才能建立美滿人生。
返回列表 上一主題