مشکل در تولید عدد تصادفی
Collapse
X
-
بله حق با شما است، من عذرخواهي مي کنم، اون رو به خط يکي مانده به آخر نبايد اضافه کنيد بلکه بايد بعد از خطي که نوشته: "Range("A:A").NumberFormat = "0 اضافه کنيد.
باز اگر مشکلي داشت بفرماييد تا بررسي شود.Leave a comment:
-
-
با سلام
کدها رو درست تایپ کرده اید؟
کد PHP:ActiveSheet.Unprotect "123"
کد PHP:ActiveSheet.Protect "123"
Leave a comment:
-
ممنون از راهنمایی شما .این کدها رو اضافه کردم عمل میکنه ولی دیگه شیت رو protect نمیکنه !به نظر میرسه کدی که باید دوباره قفلش کنه و در خط یکی مانده به آخر اضافه میشه عمل نمیکنه.با رمز protect مي کنيد و يا بدون رمز؟ آخه بعضي مواقع کاربران بدون رمز هم protect مي کنند (صرفا" به خاطر اينکه يک وقت اشتباها" خودشان چيزي را ناخواسته تغيير ندهند)
بايد ابتداي کد يک خط براي باز کردن قفل و آخر کد يک خط براي قفل مجدد شيت اضافه کنيد (درخط دوم و خط يکي مانده به آخر)
"ActiveSheet.Unprotect "123 براي باز کردن است، البته بايد به جاي 123 رمز خودتان را بنويسيد و اگر بدون رمز قفل مي کنيد فقط بنويسيد: ActiveSheet.Unprotect
و در آخر کد هم بنويسيد "ActiveSheet.protect "123 و يا اگر رمز ندارد: ActiveSheet.protect
البته اون وقت بهتر است براي قسمت vba فايل اکسل مورد نظرتان هم رمز گذاري کنيد وگرنه کاربران وارد با مراجعه به آن قسمت رمزتان را خواهند يافت.
مرسی از توجه شماLeave a comment:
-
با رمز protect مي کنيد و يا بدون رمز؟ آخه بعضي مواقع کاربران بدون رمز هم protect مي کنند (صرفا" به خاطر اينکه يک وقت اشتباها" خودشان چيزي را ناخواسته تغيير ندهند)
بايد ابتداي کد يک خط براي باز کردن قفل و آخر کد يک خط براي قفل مجدد شيت اضافه کنيد (درخط دوم و خط يکي مانده به آخر)
"ActiveSheet.Unprotect "123 براي باز کردن است، البته بايد به جاي 123 رمز خودتان را بنويسيد و اگر بدون رمز قفل مي کنيد فقط بنويسيد: ActiveSheet.Unprotect
و در آخر کد هم بنويسيد "ActiveSheet.protect "123 و يا اگر رمز ندارد: ActiveSheet.protect
البته اون وقت بهتر است براي قسمت vba فايل اکسل مورد نظرتان هم رمز گذاري کنيد وگرنه کاربران وارد با مراجعه به آن قسمت رمزتان را خواهند يافت.Last edited by Ali Parsaei; 2015/05/16, 02:22.Leave a comment:
-
مرسی از پاسخ شما ولی به یک مشکل برخوردم و اون اینکه وقتی protect sheet میکنم از کدها ایراد run-time error 1004 میگیره.حالا چطور میتونم protect sheet کنم؟همانطور که دوستمان جناب GENERALSAMAD فرموده اند خط ابتدا و انتهايي کد مربوط به اجراي آن با يک دگمه است، ولي اجراي آن با ماکرو فرق مي کند. اگر شما آن را بخواهيد با ماکرو اجرا کنيد خط آخر (End Sub) تغيير نخواهد کرد ولي خط اول را بايد تغيير دهيد مثلا" اگر شماره ماکرو شما "يک" باشد بايد کد را با عبارت ()Sub Macro1 شروع کنيد در اين صورت با هر بار اجراي ماکرو يک عدد تصادفي ايجاد خواهد شد.Leave a comment:
-
همانطور که دوستمان جناب GENERALSAMAD فرموده اند خط ابتدا و انتهايي کد مربوط به اجراي آن با يک دگمه است، ولي اجراي آن با ماکرو فرق مي کند. اگر شما آن را بخواهيد با ماکرو اجرا کنيد خط آخر (End Sub) تغيير نخواهد کرد ولي خط اول را بايد تغيير دهيد مثلا" اگر شماره ماکرو شما "يک" باشد بايد کد را با عبارت ()Sub Macro1 شروع کنيد در اين صورت با هر بار اجراي ماکرو يک عدد تصادفي ايجاد خواهد شد.Leave a comment:
-
خوب مي شود گفت به نوعي اين يک مسئله جديد مي باشد و شرايطش کلا" فرق مي کند، براي اين منظور مي توان از کد زير استفاده کرد:کد PHP:Private Sub Worksheet_SelectionChange(ByVal Target As Range)
FIRST:
Dim C As Range
For Each C In Range("A1:A15")
If C.Offset(0, 1) <> "" And C = "" Then
C.Select
Selection.Value = "=RANDBETWEEN(1,15)"
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Dim D As Integer
D = ActiveCell.Row
If WorksheetFunction.CountIf(Range("A1:A15"), Cells(D, 1)) > 1 Then
ActiveCell.Value = ""
GoTo FIRST
End If
End If
Next
End Sub
Last edited by Ali Parsaei; 2015/05/16, 01:02.Leave a comment:
-
با سلام
اگه منظورتون این کد هست
این کد مربوط به شی دکمه (Button) و رویداد کلیک هستکد PHP:Private Sub CommandButton1_Click()
End Sub
این اشیا رو میتونید از تب Developer مشاهده کنیدLeave a comment:
-
ممنون دوست عزیز بابت وقتی که گذاشتید.سلام،
کد امنيتي حتما" بايد تصادفي باشد؟ يا اگر فقط يکتا باشد کافي است؟ اين دو با هم خيلي تفاوت دارد، دومي راحت است ولي براي اولي بايد از کد نويسي و ماکرو استفاده کنيد،
شما با ماکرو ها آشنايي داريد؟
به فرض مثال کد زير در ستون A اعداد تصادفي 12 رقمي يکتا ايجاد مي کند البته اگر داده هايتان در جاي ديگري باشد بايد يک کم تغييرش دهيد، مي شود يک دگمه در صفحه قرار دهيد و اين کد را به آن نسبت داده و هر موقع خواستيد با فشرده دگمه کد مربوطه در آخرين خانه خالي ايجاد خواهد شد:
کد:Private Sub CommandButton1_Click() Dim C As Range For Each C In Range("A:A") If C = "" Then C.Select Exit For End If Next Selection.Value = "=RANDBETWEEN(100000000000,999999999999)" Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False Range("A:A").RemoveDuplicates Columns:=1, Header:=xlNo Range("A:A").NumberFormat = "0" If Selection.Value = "" Then CommandButton1_Click Else Exit Sub End If End Sub
من با ماکرو ها آشنايي نداشتم ولی با زحمتی که کشیدید باعث شد کمی سرچ کنم.ابتدا برنامه اجرا نشد ولی با پاک کردن Private از اولش بنظرم درست شد .اصلا این Private چه کار میکنه؟ بازم ممنونمLeave a comment:
-
تشکر
فقط برای اینکه کد کامل بشه احتمال داره توی ستون b سلول خالی داشته باشیم
که میخوایم فقط سطرهایی که توی ستون b پر میشه همون سطرها توی ستون a عدد تصادفی تولید بشه
تشکرLast edited by generalsamad; 2015/05/15, 20:05.Leave a comment:
-
اون وقت بايد تو رويداد SELECTION_CHANGE شيت کد را بنويسيم، يک همچين چيزي مي شود: (امتحان کنيد ببينيد درست نوشته ام و کار مي کند؟)
توضيح اينکه روال کار را اول به نام FIRST نام گذاري کرده ام و در آخر گفته ام: اگر REMOVE DUPLICATE انجام شد و خانه فعال خالي ماند (يعني مقدارش تکراري بود و حذف شد) دوباره FIRST را اجرا کند:
ضمنا" اون خط که راجع به فرمت مي باشد را صرفا" براي اين گذاشته ام که در کامپيوتر من بعضي مواقع بعد از REMOVE DUPLICATE فرمت سل عوض مي شد و عدد هاي 12 رقمي را به صورت علمي (مثلا" 2.34356E+12) مي نوشت و خواستم اين مشکل بوجود نيايد (اگر يادتان باشد فرمول اول را براي عددهاي 12 رقمي نوشته بودم)کد:Private Sub Worksheet_SelectionChange(ByVal Target As Range) FIRST: Dim C As Range For Each C In Range("A1:A15") If C = "" And C.Offset(0, 1).Value <> "" Then C = "=RANDBETWEEN(1,15)" C.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False Range("A1:A15").RemoveDuplicates Columns:=1, Header:=xlNo Range("A1:A15").NumberFormat = "0" If Selection.Value = "" Then GoTo FIRST End If Exit For End If Next End SubLast edited by Ali Parsaei; 2015/05/15, 17:38.Leave a comment:
-
تشکر
یه سوال دیگه
اگه بخوایم این کد رو روی دکمه اعمال نکنیم
مثلا کد طوری باشه که اگه سطر متناظر ستون b پر شد توی سطر متناظر توی ستون a عدد تصادفی وارد شه
که نیازی نباشه دکمه ای بسازیم
و عمل تولید عدد تصادفی بر اساس ستون b باشه
بطور مثال اگه توی سلول B1 مقداری ثبت شد سلول A1 عدد تصادفی تولید کنه
با تشکرLeave a comment:
Leave a comment: