فيكس كردن يك رديف در يك فايل اكسل

Collapse
این تاپیک قفل است.
X
X
 
  • زمان
  • نمایش
حذف همه
new posts
  • MA.SHAHIDI

    • 2019/01/07
    • 83
    • 56.00

    [حل شده] فيكس كردن يك رديف در يك فايل اكسل

    سلام
    فايلي دارم كه از طريق ريكورد VBA دستوري گرفته به شرح زير :


    Range("B7:X7").Select
    Selection.Copy
    Sheets("MAX").Select
    Range("A1").Select
    Selection.End(xlDown).Select
    ActiveCell.Offset(1, 0).Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    Sheets("A").Select
    Application.CutCopyMode = False
    Range("C7:X7").Select
    Selection.ClearContents
    Sheets("B1").Select
    Range("C5").Select
    همانطور كه مشخص است يه رديف را از بين دو ستون كپي كرده و در شيت MAX كپي ميكنه ، به شيت اوليه برمي گرده . از آنجا كه به دليل اطمينان از ورود اطلاعات دكمه حذف هم ديده ام ، اگر قبل از ثبت اطلاعات دكمه حذف زده شود باعث مي شود در Selection.End(xlDown).Select به آخرين سلول آن ستون بره و پيغام باگ بده . حالا اگر بشود به طريقي رديف اول را ثابت كنم كه اطلاعات آن حذف نشود ميشود از پيغام خطا جلوگيري كرد . لطفا مرا راهنمايي نماييد .
  • hadi1980

    • 2019/01/07
    • 237
    • 86.00

    #2
    سلام
    ميشه فايلتون رو بزاريد تا بشه دقيق راهنمايي کرد چون کدي که نوشتيد بدون مشکل اجرا ميشه و پيام خطايي نميده
    ضمنا يک نکته هم ميگم شايد براتون جالب باشه و اينکه براي خيلي از کارها لازم نيست همش از دستور select استفاده کنيد چونکه اينجوري زمان اجراي برنامه سلول فعال تغيير ميکنه و اجراي برنامه زشت ميشه
    مثلا بجاي اين دو خط
    Range("B7:X7").Select
    Selection.Copy
    ميتونيد بدون انتخاب کردن محدوده اونو خيلي راحتتر و قشنگتر کپي کنيد
    اينجوري
    Range("B7:X7").Copy

    يا مثلا بجاي اين چند خط
    Range("A1").Select
    Selection.End(xlDown).Select
    ActiveCell.Offset(1, 0).Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False


    فقط بنويسيد (دو سه تا عبارت آخر هم که احتمالا نيازي بهش نداشتيد و چون ضبط شده تايپ شده)
    Range("A1").End(xlDown).Offset(1, 0).Range("A1").PasteSpecial Paste:=xlPasteValues

    کامنت

    • MA.SHAHIDI

      • 2019/01/07
      • 83
      • 56.00

      #3
      سلام
      ممنونم از اظهار نظر و راهنماييتون .
      شما درست مي فرماييد. همه چي درسته تا زماني كه بدون ثبت اطلاعاتي ، دستور حذف داده بشه . فايل رو براتون مي فرستم . لطفا به شيت max بريد . اين شيت تمام اطلاعات وارد شده را در خود ذخيره مي كند.(با همان كدهايي كه در سوال بود ) اگر در رديف اول درستون اول هر جدول كه با رنگ مجزا شده اند ، عددي باشد، ثبت به درستي عمل مي كند اما اگر عددي نباشد پيغام باگ مي دهد . به همين منظور به دنبال فيكس كردن رديف اول هستم .

      فايل AAA را با فرمت RAR براتون فرستادم . (XSLB را قبول نكرد )
      فایل های پیوست شده

      کامنت

      • hadi1980

        • 2019/01/07
        • 237
        • 86.00

        #4
        سلام مجدد
        اول اينکه اين چه وضع برنامه نوشتنه و بهتره خيلي روي اون کار کنيد
        مثلا اينکه لازم نيست اونهمه فرم تکراري تعريف ميکرديد و ميشد خيلي ساده‌تر کار کرد.
        براي حل مشکلتان که تو سه جاي برنامه رخ ميده ميشه چندتا کار کرد
        مثلا براي X1 يکي از راهکارها اينه که بعد از خط Range("X1").Select
        اين کد رو اضافه کنيد
        If (Range("X2").Value = "") Then
        Range("X1").Select
        Else
        Selection.End(xlDown).Select
        End If
        اينجوري اگه سلول رديف دوم تو شيت max خالي باشه بجاي اينکه بپره تا پايين ميره سلول x2 رو انتخاب ميکنه
        همش همين و به همين سادگي
        ضمنا بنظرم تو همين قسمت (کپي کردن از b1 به max اين خط برنامه غلطه
        Range("D5:V5").Select
        و بايد اينجوري باشه
        Range("B5:V5").Select
        اگه مشکلي بود بگيد تا برنامه رو اصلاح کنم و بزارم

        کامنت

        چند لحظه..