فارسی بودن نام فایل در vba

Collapse
X
 
  • زمان
  • نمایش
حذف همه
new posts
  • karbar

    • 2011/08/20
    • 37
    • 26.00

    فارسی بودن نام فایل در vba

    این کد ساده، در یک جدول اکسل، آدرس عکس رو می گیره و اون رو ذخیره میکنه. ضمنا نام فایل رو برای ذخیره از یکی از سلول ها برمیداریم.
    Private Declare Function URLDownloadToFile Lib "urlmon" _
    Alias "URLDownloadToFileA" (ByVal pCaller As Long, _
    ByVal szURL As String, ByVal szFileName As String, _
    ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
    Sub GetPageTitle()
    Dim i As Long, url As String, path As String
    For i = 2 To 444
    DoEvents
    url = Sheet1.Range("m" & i).Value
    path = "D:\site\___1392\____sabtenam\aksha\" & Sheet1.Range("A" & i).Value & "-cart.jpg"
    URLDownloadToFile 0, url, path, 0, 0
    Next
    End Sub
    اما اگر سلولی که نام فایل رو ازش می خواهیم برداریم فارسی باشه، کد عمل نمی کنه.
    برای رفع این مشکل کد زیر رو پیدا کردم که کار می کنه، اما نمیدونم چطوری با کد بالا تلفیقش کنم
    Option Explicit

    #If Win64 Then
    Private Declare PtrSafe Function User32MsgBox Lib "user32" Alias "MessageBoxW" _
    (Optional ByVal hWnd As Long, Optional ByVal Prompt As Long, _
    Optional ByVal Title As Long, Optional ByVal Buttons As Long) As Long

    #Else
    Private Declare Function User32MsgBox Lib "user32" Alias "MessageBoxW" _
    (Optional ByVal hWnd As Long, Optional ByVal Prompt As Long, _
    Optional ByVal Title As Long, Optional ByVal Buttons As Long) As Long

    #End If


    Public Function MessageBoxW(cPrompt As String, _
    Optional cButtons As VbMsgBoxStyle = vbOKOnly, _
    Optional cTitle As String) As Long

    MessageBoxW = User32MsgBox(0, StrPtr(cPrompt), StrPtr(cTitle), cButtons)
    '*****Probably need to convert StrPtr to 32bit long on 64bit - see next line
    'MessageBoxW = User32MsgBox(0, cLng(StrPtr(cPrompt)), CLng(StrPtr(cTitle)), cButtons)

    End Function



    Sub MyMacro()
    Dim txt As String
    txt = Sheets("Sheet1").Cells(1, 1).Value
    MessageBoxW (txt)
    End Sub
    لطفا راهنمایی کنید چطوری با کد اول تلفیقش کنم؟ یا اینکه بگویید چه کنیم تا در کد اول فارسی هم فهمیده شود؟
    با تشکر قبلی
  • ~M*E*H*D*I~
    • 2011/10/19
    • 4376
    • 70.00

    #2
    درود

    در خصوص استفاده از نام فارسی نبایست مشکلی داشته باشید احتمالا کد نویسی شما اشکال داره اما در اینجور مواقع خود از
    کد PHP:
    FileDialog(msoFileDialogOpen
    استفاده میکنم بجای مسیر دادن

    sigpic

    کامنت

    • karbar

      • 2011/08/20
      • 37
      • 26.00

      #3
      با اون کد اول 400 فایل در عرض چند ثانیه ذخیره میشه
      وقت فایل دیالوگ باز کردن نمیشه
      بدون استفاده از فایل دیالوگ باید مشکل حل بشه
      اگه تست کنید میبینید که کد دومی مشکل فارسی رو حل میکنه
      اما نمیدونم چطور تو کد اول ازش استفاده کنم

      کامنت

      • MEYTI

        • 2010/11/11
        • 362

        #4
        یا سلام دوست عزیز لطفا کدهاتونو داخل تگ کد بذارید در ضمن اگر نمونه فایلتونو بذارید بهتر جواب میگیرید
        مهدی کریمی

        کامنت

        • karbar

          • 2011/08/20
          • 37
          • 26.00

          #5
          طبق راهنمایی شما کدها رو داخل تگ کد نوشتم
          امیدوارم دوستان جواب بدهند

          این کد ساده، در یک جدول اکسل، آدرس عکس رو می گیره و اون رو ذخیره میکنه. ضمنا نام فایل رو برای ذخیره از یکی از سلول ها برمیداریم.
          کد:
          Private Declare Function URLDownloadToFile Lib "urlmon" _
          Alias "URLDownloadToFileA" (ByVal pCaller As Long, _
          ByVal szURL As String, ByVal szFileName As String, _
          ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
          Sub GetPageTitle()
          Dim i As Long, url As String, path As String
          For i = 2 To 444
          DoEvents
          url = Sheet1.Range("m" & i).Value
          path = "D:\site\___1392\____sabtenam\aksha\" & Sheet1.Range("A" & i).Value & "-cart.jpg"
          URLDownloadToFile 0, url, path, 0, 0
          Next
          End Sub
          اما اگر سلولی که نام فایل رو ازش می خواهیم برداریم فارسی باشه، کد عمل نمی کنه.
          برای رفع این مشکل کد زیر رو پیدا کردم که کار می کنه، اما نمیدونم چطوری با کد بالا تلفیقش کنم
          کد:
          Option Explicit
          
          
          #If Win64 Then
          Private Declare PtrSafe Function User32MsgBox Lib "user32" Alias "MessageBoxW" _
          (Optional ByVal hWnd As Long, Optional ByVal Prompt As Long, _
          Optional ByVal Title As Long, Optional ByVal Buttons As Long) As Long
          
          
          #Else
          Private Declare Function User32MsgBox Lib "user32" Alias "MessageBoxW" _
          (Optional ByVal hWnd As Long, Optional ByVal Prompt As Long, _
          Optional ByVal Title As Long, Optional ByVal Buttons As Long) As Long
          
          
          #End If
          
          
          
          
          Public Function MessageBoxW(cPrompt As String, _
          Optional cButtons As VbMsgBoxStyle = vbOKOnly, _
          Optional cTitle As String) As Long
          
          
          MessageBoxW = User32MsgBox(0, StrPtr(cPrompt), StrPtr(cTitle), cButtons)
          '*****Probably need to convert StrPtr to 32bit long on 64bit - see next line
          'MessageBoxW = User32MsgBox(0, cLng(StrPtr(cPrompt)), CLng(StrPtr(cTitle)), cButtons)
          
          
          End Function
          
          
          
          
          
          
          Sub MyMacro()
          Dim txt As String
          txt = Sheets("Sheet1").Cells(1, 1).Value
          MessageBoxW (txt)
          End Sub

          لطفا راهنمایی کنید چطوری با کد اول تلفیقش کنم؟ یا اینکه بگویید چه کنیم تا در کد اول فارسی هم فهمیده شود؟
          با تشکر قبلی

          کامنت

          • karbar

            • 2011/08/20
            • 37
            • 26.00

            #6
            دوستانی که می توانند به سوال فوق پاسخ بدهند
            با تشکر

            کامنت

            چند لحظه..